CodeSky 代码之空

随手记录自己的学习过程

PHP 使用curl获取网页内容

2016-01-09 12:04分类: PHP评论: 1

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

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

1$ch = curl_init();
2
3curl_setopt($ch, CURLOPT_URL, "http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1");
4curl_setopt($ch, CURLOPT_HEADER, 0);
5$out = curl_exec($ch);
6
7curl_close($ch);
8

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

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

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

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

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

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

最后,获取Bing昨日壁纸demo

评论 (1)

调用远程接口的不完美解决方案 R11; 小金鱼儿2016年1月9日 14:07

[...]jQuery 初试jsonp 和 PHP 使用curl获取网页内容by 小天[...]