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 有时不起作用并给出空结果的主要内容,如果未能解决你的问题,请参考以下文章

Android Webview - 后退按钮不起作用

地理位置有时不起作用[关闭]

通过 PHP cUrl 创建 DHL 发货标签不起作用

css 为啥有时MARGIN 不起作用,

findElement 在 Android 上的 Appium 中不起作用

为啥我的 cURL 请求在 XAMPP 中不起作用?