使用文件获取内容或 curl
Posted
技术标签:
【中文标题】使用文件获取内容或 curl【英文标题】:using file get contents or curl 【发布时间】:2011-08-16 04:52:13 【问题描述】:我被要求使用一个简单的 facebook api 来返回返回 json 字符串的工作中喜欢或分享的数量。 现在,由于我要为大量链接执行此操作,因此哪个更好:
使用 file_get_contents 或 cURL。
它们似乎都返回相同的结果,而 cURL 似乎使用起来更复杂,但它们之间有什么区别。为什么大多数人建议使用 cURL 而不是 file_get_contents? 在我运行可能需要一整天才能处理的 api 之前,我希望得到反馈。
【问题讨论】:
【参考方案1】:cURL 比 file_get_contents 更广泛地支持 https 请求,而且它并不太复杂。虽然单行 file_get_contents 解决方案看起来很干净,但它的幕后开销比 cURL 大。
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,$feedURL);
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
$buffer = curl_exec($curl_handle);
curl_close($curl_handle);
这是我用来进行 facebook api 调用的方法,因为它们中的许多都需要 access_token,而 facebook 只会在安全连接中接受 access_token 信息。我还注意到执行时间有很大差异(cURL 更快)。
【讨论】:
【参考方案2】:几年前,我对两者进行了基准测试,CURL 更快。使用 CURL,您可以创建一个可用于每个请求的 CURL 实例,它直接映射到非常快速的 libcurl 库。使用 file_get_contents 会产生协议包装器的开销,并且会为每个请求执行初始化代码。
我将挖掘我的基准脚本并在 php 5.3 上运行,但我怀疑 CURL 仍然会更快。
【讨论】:
我在 5.3 和 5.4 上对两者进行了基准测试,cURL 仍然比file_get_contents
快得多,尤其是对于同一请求的多次调用(所以,基本上你所说的仍然代表 5.3+)。
我现在还用 PHP5.5 中的 2 个服务器对其进行了基准测试 - curl 比简单的 file_get_contents() 快 3-10 倍 可以在此处找到脚本:***.com/questions/13004805/…
我最近更改了一个脚本,使其循环一个 curl 句柄,以使用 curl_exec
而不是等量的 file_get_contents
获取 1000 多个请求。结果快了 3 倍。我可以补充一点,因为我回收了 curl 句柄(调用 curl_init
一次),因此消除了为每个请求建立新连接的开销。CURL 似乎在可能的情况下使用 HTTP Keep-Alive,例如当句柄被回收并且主机名相同时。以上是关于使用文件获取内容或 curl的主要内容,如果未能解决你的问题,请参考以下文章
如何获取由 JavaScript 使用 cURL 加载的网页内容?