【问题标题】:Php curl is active but curl_exec always returns falsephp curl 处于活动状态,但 curl_exec 始终返回 false
【发布时间】:2020-03-23 04:16:54
【问题描述】:

我正在尝试在 PHP 中使用 cURL 从外部网站获取数据,但它不起作用。

CURL 在phpinfo() 中启用。

我的测试代码在$result=FALSE 所在的CentOS 8/nginx server 中无法运行,但在Debian9/nginx 中运行良好。

$ch=curl_init ("http://somogyivakok.hu/");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$result=curl_exec ($ch);
curl_close ($ch);

你知道哪里出了问题吗?

cURL 版本是 7.61。

【问题讨论】:

  • PHP - Debugging Curl的可能重复
  • 我也遇到了同样的问题,很想知道你是怎么解决的

标签: php curl centos8


【解决方案1】:

您要查找的资源不在 somogyivakok.hu,而是在 www.somogyivakok.hu。因此,您可以使用正确的 uri 或指示脚本使用 CURLOPT_FOLLOWLOCATION 选项按照以下示例进行重定向:

$ch = curl_init ("http://somogyivakok.hu/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
curl_close($ch);

更新:

进一步调查,尽管CURLOPT_FOLLOWLOCATION 存在问题,因为curl_exec 返回了false,服务器配置也存在问题,更准确地说是httpd_can_network_connect。 使用CURLOPT_VERBOSE 调试以下记录:

Immediate connect fail for 1.1.1.1: Permission denied

this thread 上,我们发现解决方案是在服务器外壳上运行以下命令:

sudo setsebool httpd_can_network_connect 1

【讨论】:

  • 不,不是这样的。
  • 在我实际测试我的代码时肯定是这种情况:) 没有 CURLOPT_FOLLOWLOCATION 我确实得到了一个空字符串。 http://somogyivakok.hu/ 使用 301 重定向到 http://www.somogyivakok.hu/(Ps。如果您使用的是 Chrome,www 部分会被浏览器隐藏)。
  • 顺便说一句,我刚刚意识到如果 curl_exec 返回 false 可能还有其他错误。您能否使用curl_error 并提供返回的错误(查看第一个示例here)?
  • Curl_error 返回一个空字符串。我还使用CURLOPT_VERBOSE 进行了调试,返回以下内容:Trying 94.199.183.214... * TCP_NODELAY set * Immediate connect fail for 94.199.183.214: Permission denied * Closing connection 0
  • 您上一条评论中缺少返回值...除了curl_error 之外,您能否也返回curl_errno 输出(更多信息here)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 2022-06-28
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多