cURL 有时不起作用并给出空结果
Posted
技术标签:
【中文标题】cURL 有时不起作用并给出空结果【英文标题】:cURL not working sometimes and gives empty result 【发布时间】:2015-08-20 09:14:54 【问题描述】:我使用 cURL 从另一个网站获取数据。有时显示数据,有时显示空结果
这是我的代码
函数 get_data($url) $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); $agent=$_SERVER["HTTP_USER_AGENT"]; curl_setopt($ch,CURLOPT_USERAGENT, $agent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); $data = curl_exec($ch); curl_close($ch); 返回$数据; $returned_content = get_data('www.example.com'); 回声 $returned_content;【问题讨论】:
尝试使用curl_error($ch);
php.net/curl_error检查失败时会发生什么
对我来说工作得很好,也许你连接有问题。
可能与您请求的页面有关,但您可以尝试此功能,因为它有一些错误处理:geneticcoder.blogspot.com/2015/02/curl-function-for-php.html
尝试在echo $returned_content
之后添加exit;
;
顺便说一句 www.example.com
不是 URL,您缺少协议。
【参考方案1】:
可能是你从 curl_init 调用了太多的连接到一个 IP 地址,所以服务器阻塞了连接并导致开/关错误。
【讨论】:
【参考方案2】:没有收到任何内容的回复可能是由于许多不同原因中的一个或多个,您需要弄清楚是哪一个。
在执行传输后在您的代码中使用curl_error($ch)
,以查看 curl 是否告诉您问题。
调查响应标头。 HTTP 传输可以成功并且不返回任何错误,但可能只响应 HTTP 标头而根本没有正文。然后,HTTP 标头可能包含有关原因的线索。也许这是您应该遵循的重定向,也许它需要 HTTP 身份验证,或者服务器指示临时服务器故障。
【讨论】:
【参考方案3】:Curl in PHP returns null on AWS EC2 instance
我遇到了类似的问题,我通过确保 PHP5 和 Apache2 文件夹中的 php.ini 文件中的版本和设置相同来修复它。如果不是,那么 Apache2 会尝试执行 php.ini 设置中设置的版本。还要确保安装了 PHP5-libcurl。它也很重要。
【讨论】:
【参考方案4】:间歇性故障可能是由于 DNS 服务器不稳定,即使不是,您仍然可以从使用 Google 的 DNS 服务器中受益。 见:https://developers.google.com/speed/public-dns/docs/using
【讨论】:
查找在本地缓存。对于对同一域的每个请求,您不会每次都联系 DNS 服务器。这就是为什么使用 TTL 进行查找的原因。出于隐私原因,我也怀疑使用 Google 的 DNS 通常会更好。【参考方案5】:解决方案
确保没有任何变量或 url 空间。像“$user_name = "Lokman Hosen"”。你必须给 urldecode "$user_name = "Lokman_Hosen"" 或 "$user_name = "Lokman%20Hosen""。你可以使用
urldecode()
删除空间的功能。现在 cURL 不允许任何空间。
【讨论】:
以上是关于cURL 有时不起作用并给出空结果的主要内容,如果未能解决你的问题,请参考以下文章