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