使用文件获取内容或 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的主要内容,如果未能解决你的问题,请参考以下文章

使用curl获取文件内容的函数。

PHP 使用curl获取文件内容的函数。

如何获取由 JavaScript 使用 cURL 加载的网页内容?

php:使用 cURL 获取 url 内容(json)

curl -L 通过 Alamofire for Swift 3 从 Box 获取文件内容

无法通过 HTTPS 获取 file_get_contents 或 cURL