PHP 使用curl获取网页内容

在上一篇文章中,我们试图获取Bing的壁纸,但是却发现它虽然是个标准的json,但不支持跨域,响应头没有:Access-Control-Allow-Origin: *

上一次用curl还是刚学PHP的时候复制粘贴的,现在感受深多了,看得懂到底是怎么回事了,不过我们的需求也比上次简单多了,上次是缓存图片到本地,而这次我们只要把内容输出就可以了。

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1");
curl_setopt($ch, CURLOPT_HEADER, 0);
$out = curl_exec($ch);

curl_close($ch);

不过这样的话,第一,输出的ContentType是text/html,第二,还是不能跨域。

解决这两个问题很简单,设置header就行了。

header('Content-type: application/json');
header('Access-Control-Allow-Origin: *');

提示:如果你的虚拟主机不支持curl,那就GG了……不管你行不行,反正我的不行——继续用jsonp(不过Hostker的支持^_^)

另外,在解决完之后,朋友发给了我他的解决方案,思路有点类似,但方案还是有差别的,尤其是在性能上,他使用的函数:file_get_contents,然后似乎觉得速度慢,我觉得应该是函数的性能差异,就去看了一下,果然:http://www.71j.cn/archives/140

反正谷歌一下会有各种性能差异的介绍,不多说,curl大法果然棒!

最后,获取Bing昨日壁纸demo

植入部分

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

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

标签: 成品, 知识, 代码段, 语法

添加新评论