CodeSky 代码之空

随手记录自己的学习过程

curl获取QQ头像并缓存

2014-02-18 15:33分类: PHP评论: 0

这是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)