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

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 成品, 源码

添加新评论