curl获取QQ头像并缓存
这是M-Show中用到的一个最神奇的东西,其实我至今还是不会用,只是网上找到了类似的改了一下,顺便伪造来路这样防盗链机制就失效了=A=
演示部分不包括缓存,所以载入会慢,为了良好的载入速度和不吃CPU(小新说的),缓存非常有必要,缓存的方法其实就是存到本地,判断是否已经获取,缓存完毕的重定向到本地的位置就好了=A=
这里是直接获取的代码:
1 header('content-type:image/jpeg');
2
3 $hander = curl_init();
4 curl_setopt($hander,CURLOPT_URL,"http://qlogo4.store.qq.com/qzone/865796691/865796691/100?1376535695");
5 curl_setopt($hander,CURLOPT_HEADER,0);
6 curl_setopt($hander,CURLOPT_FOLLOWLOCATION,1);
7 curl_setopt($hander, CURLOPT_REFERER, 'http://qzone.qq.com/');
8
9 //curl_setopt($hander,CURLOPT_RETURNTRANSFER,false);//以数据流的方式返回数据,当为false是直接显示出来
10 //curl_setopt($hander,CURLOPT_TIMEOUT,60);
11 //$query = curl_getinfo($hander,CURLINFO_CONTENT_TYPE);
12 curl_exec($hander);
13 curl_close($hander);
14
缓存方式:
1 header('content-type:image/jpeg');
2
3 if(!file_exists('avatar/865796691.jpg')) {
4 $hander = curl_init();
5 $fp = fopen('avatar/865796691.jpg','wb');
6 curl_setopt($hander,CURLOPT_URL,"http://qlogo4.store.qq.com/qzone/865796691/865796691/100?1376535695");
7 curl_setopt($hander,CURLOPT_FILE,$fp);
8 curl_setopt($hander,CURLOPT_HEADER,0);
9 curl_setopt($hander, CURLOPT_REFERER, 'http://qzone.qq.com/');
10
11 //curl_setopt($hander,CURLOPT_TIMEOUT,60);
12 //$query = curl_getinfo($hander,CURLINFO_CONTENT_TYPE);
13 curl_exec($hander);
14 fclose($fp);
15 curl_close($hander);
16
17 $hander = curl_init();
18 curl_setopt($hander,CURLOPT_URL,"http://qlogo4.store.qq.com/qzone/865796691/865796691/100?1376535695");
19 curl_setopt($hander,CURLOPT_HEADER,0);
20 curl_setopt($hander, CURLOPT_REFERER, 'http://qzone.qq.com/');
21 curl_setopt($hander,CURLOPT_RETURNTRANSFER,false);//以数据流的方式返回数据,当为false是直接显示出来
22 curl_exec($hander);
23 curl_close($hander);
24 } else {
25 header('Location:avatar/865796691.jpg');
26 }
27
这里最后用header
重定向。关于重定向,可见:http://codesky.me/archives/php-js-redirectway.wind
之所以运行两次是因为一次是保存作用一次是浏览作用,直接显示数据流,然后header('content-type:image/jpeg');
就能看到图片,如果不加文件类型就会出来一堆乱码了=A=
当然 curl获取之后通过简单的加减乘除自定义一个算法也可以隐藏QQ号避免暴露,所以还是挺好的
content-type的对照表:http://tool.oschina.net/commons
评论 (0)