PHP cURL与file_get_contents

时间:2012-06-16 15:58:12

标签: php curl file-get-contents

访问REST API时,这两段代码有何不同?

$result = file_get_contents('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');

$ch = curl_init('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);

判断,它们都产生相同的结果
print_r(json_decode($result))

3 个答案:

答案 0 :(得分:110)

file_get_contents()是一把简单的螺丝刀。非常适合简单的GET请求,其中标头,HTTP请求方法,超时,cookiejar,重定向和其他重要事项无关紧要。

带有stream contextsetopt的cURL的{p> fopen()是您可以想到的每个位和选项的powerdrills。

答案 1 :(得分:20)

除此之外,由于最近的一些网站黑客行为,我们必须更多地保护我们的网站。在这样做时,我们发现 file_get_contents 无法正常工作, curl 仍然有效。

不是100%,但我相信这个php.ini设置可能阻止了 file_get_contents 请求。

; Disable allow_url_fopen for security reasons
allow_url_fopen = 0

无论哪种方式,我们的代码现在都可以使用 curl

答案 2 :(得分:15)

这是一个古老的主题,但在我对我的API的最后一次测试中,cURL更快更稳定。有时,较大请求的file_get_contents需要超过5秒,而cURL只需要1.4到1.9秒,而且速度要快一倍。

我需要在此添加一条注释,我只是发送GET并重新接收JSON内容。如果你正确设置cURL,你会得到很好的回应。只是"告诉" cURL你需要发送什么,你需要什么,以及它。

在你的例子中我想做这个设置:

$ch =  curl_init('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_TIMEOUT, 3);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
$result = curl_exec($ch);

此请求将以0.01秒的最大值返回数据