根据Google Custom Search API的说明,您可以使用REST界面的GET动词调用它,例如:
GET https://www.googleapis.com/customsearch/v1?key=INSERT-YOUR-KEY&cx=017576662512468239146:omuauf_lfve&q=lectures
Run Code Online (Sandbox Code Playgroud)
我设置了我的API密钥和自定义搜索引擎,当我的测试查询直接粘贴到我的浏览器上时,它运行正常,我将JSON文件显示给我.
然后我尝试使用以下命令从我的PHP代码调用API:
$json = file_get_contents("$url") or die("failed");
Run Code Online (Sandbox Code Playgroud)
其中$ url与浏览器上的相同,但我的PHP代码在尝试打开时死亡.
之后我尝试了curl,它起作用了.代码是这样的:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$body = curl_exec($ch);
Run Code Online (Sandbox Code Playgroud)
问题:
Vyk*_*tor 12
首先你应该检查ini设置allow_url_fopen,AFAIK这是唯一file_get_contents()不应该工作的原因.也不推荐使用safe_mode此功能.
哦,基于你的评论,你必须http://在使用文件系统函数时添加到URL ,它是一个包装器告诉php你需要使用http请求,而不是它的功能认为你需要打开./google.com(相同google.txt).
是的,您可以使用套接字构建几乎任何cURL请求.
我个人认为你应该坚持使用cURL,因为:
file_get_contents 可能会在获取IP后重写您的请求,获得与以下内容相同的内容:
file_get_contents("xxx.yyy.www.zzz/app1",...)
Run Code Online (Sandbox Code Playgroud)
如果您在请求中进行IP寻址,许多服务器将拒绝您访问.
使用cURL时,此问题不存在.它解析了在设置时留下请求的主机名,因此服务器响应不严重.
这也可能是"原因"......
为什么打电话时要使用引号file_get_contents?
正如评论中提到的,file_get_contents需要在php.iniallow_url_fopen上启用。
您可以使用fsockopen,但您必须手动处理 HTTP 请求/响应,当您拥有 cURL 时,这将是重新发明轮子。也同样如此socket_create。
关于这个问题的标题:cURL 可以比file_get_contents. 不过,应该提到的是,使用流上下文允许您为调用进行大量设置file_get_contents。然而,我认为 cURL 仍然更完整,因为它为您提供了使用多个并行处理程序的可能性。
| 归档时间: |
|
| 查看次数: |
13761 次 |
| 最近记录: |