PHP cURL vs file_get_内容

PHP cURL vs file_get_内容,php,curl,file-get-contents,Php,Curl,File Get Contents,在访问RESTAPI时,这两段代码有何区别 $result = file_get_contents('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url'); 及 根据经验判断,它们都会产生相同的结果 print_r(json_decode($result)) file\u get\u contents()是一把简单的螺丝刀。非常适合于简单的GET请求,其中头、HTTP请求方法、超时、cookie

在访问RESTAPI时,这两段代码有何区别

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

根据经验判断,它们都会产生相同的结果

print_r(json_decode($result))
file\u get\u contents()
是一把简单的螺丝刀。非常适合于简单的GET请求,其中头、HTTP请求方法、超时、cookiejar、重定向和其他重要内容都无关紧要


fopen()
带a或cURL with的是powerdrills,你能想到的每一个钻头和选项都有。

除此之外,由于最近的一些网站黑客攻击,我们不得不更安全地保护我们的网站。在这样做的过程中,我们发现file\u get\u内容无法工作,而curl仍然可以工作

不是100%,但我相信这个php.ini设置可能阻止了文件获取内容请求


不管怎样,我们的代码现在都可以与curl一起工作。

这是一个老话题,但在我的上一次API测试中,curl更快、更稳定。有时,当cURL只需要1.4到1.9秒时,较大请求上的file_get_内容需要超过5秒,这是速度的两倍

我需要在这里添加一个注释,我只发送GET和recive JSON内容。如果你设置正确,你会有一个很好的反应。只要“告诉”你需要发送什么和接收什么就行了

例如,我想进行以下设置:

$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.10秒内返回数据

cURL
的功能远远超过
文件获取内容
。那应该足够了。FWIW速度上没有什么差别。我刚刚获取了5000个URL并将它们的HTML保存到文件中(每个文件大约200k)。作为一个实验,我用curl和file_get_内容做了一半,没有明显的区别。只要使用支持流上下文的版本,就可以用file_get_内容发送post数据。为了保持这种比喻,请注意,cURL是一个带有复杂钻夹头的powerdrill,需要您非常了解它才能实际更改它(阅读:设置cURL选项有点乏味,但允许您做任何您想做的事情)。
file\u get\u contents
还允许设置上下文,这意味着您可以随心所欲地设置标题字段。除了@develop的注释外,还可以通过流上下文发送POST、PUT、身份验证、标题、内容、代理,以及一个文件的更多内容request@velop:是的。还有方法。和重定向。和超时。。。是的,
file\u get\u contents
要求
allow\u url\u fopen
是真实的。是的,许多托管公司正在禁用
file\u get\u contents()。cURL是人们现在应该在代码中使用的功能。@fructedtech这些“漏洞”是什么?托管公司禁用
allow\u url\u fopen
,因为他们把它误认为
allow\u url\u include
allow\u url\u fopen
file\u get\u contents
可以使用。@vr\u驱动程序这些链接与
file\u get\u contents()无关。
0.1微秒(1/1000毫秒)。。。我觉得很难相信,是的。我在0.02毫秒内有一些响应,例如Twilio API电话号码检查。快0.02毫秒=20微秒;你说的0.1微秒是不对的。这比
file\u get\u contents
快了将近两倍。我只是做了一些API调用来确认。对于
file\u get\u contents
,0.8秒;对于
curl
(3个API调用),0.49秒。您应该使用自己的设置。然后您的查询将从1.4-1.9秒变为0.01秒;)
; Disable allow_url_fopen for security reasons
allow_url_fopen = 0
$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);