如何找出 cURL 挂起且无响应的原因?

问题描述 投票:0回答:4

我正在尝试找出 PHP 中 cURL 调用的问题。 它在我们的测试环境中运行良好,但在我们的生产环境中却不行。 当我尝试执行 cURL 函数时,它只是挂起并且永远不会响应。 我尝试从命令行建立 cURL 连接,但发生了同样的事情。

我想知道 cURL 是否记录了某处发生的事情,因为我无法弄清楚命令不断搅拌期间发生了什么。 有谁知道是否有一个日志可以跟踪那里发生的事情?

我认为这是连接问题,但我们的 IT 人员坚持认为我应该能够毫无问题地访问它。 有什么想法吗? 我正在运行 CentOS 和 PHP 5.1。

更新: 使用详细模式时,我收到错误 28“Connect() 超时”。 我尝试将超时延长到 100 秒,并将 max-redirs 限制为 5,但没有任何变化。 我尝试对盒子进行 ping 操作,但也超时了。 因此,我会将其提交给 IT 人员,看看他们是否会再次查看。 感谢您的所有帮助,希望我能在半小时内回来并告知这是他们的问题。

更新2:原来我的盒子正在使用外部IP地址解析服务器名称。 当 IT 部门为我提供内部 IP 地址并在 cURL 调用中替换它时,一切都运行良好。 谢谢大家的帮助。

php linux curl centos
4个回答
18
投票

在您的 php 中,您可以设置 CURLOPT_VERBOSE 变量:

curl_setopt($curl, CURLOPT_VERBOSE, TRUE);

然后记录到 STDERR,或使用

CURLOPT_STDERR
(需要文件指针)指定的文件:

curl_setopt($curl, CURLOPT_STDERR, $fp);

在命令行中,您可以使用以下开关:

  • --verbose
    向命令行报告更多信息
  • --trace <file>
    --trace-ascii <file>
    追踪文件

您可以使用

--trace-time
将时间戳添加到详细/文件输出


0
投票

您还可以使用curl_getinfo()来获取有关您的特定传输的信息。

http://in.php.net/manual/en/function.curl-getinfo.php


0
投票

尝试设置 cURL 选项

CURLOPT_MAXREDIRS
。我发现有时某些网站会出现普通浏览器用户看不到的“无限”重定向循环。

顺便说一下,默认值是 20。所以你可以考虑减少它。

https://www.php.net/manual/en/curl.constants.php#constant.curlopt-maxredirs


-1
投票

如果可能的话,请在运行 PHP 的用户(可能是运行 Apache 的用户)下尝试

sudo
ing。

curl
问题可能有多种需要用户输入的原因,例如存储在根用户的受信任证书缓存中的不受信任的证书,但不是 PHP 的证书。在这种情况下,该命令将等待一个永远不会发生的输入。

更新:仅当您使用

exec
在外部运行curl时才适用 - 也许它不适用。

© www.soinside.com 2019 - 2024. All rights reserved.