【问题标题】:How can I figure out why cURL is hanging and unresponsive?如何找出 cURL 挂起且无响应的原因?
【发布时间】:2011-02-19 04:34:19
【问题描述】:

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

我想知道 cURL 是否记录了某处发生的事情,因为我无法弄清楚在命令搅动和搅动期间发生了什么。有谁知道是否有记录那里发生的事情的日志?

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

更新:使用详细模式时,我收到错误 28“Connect() Timed Out”。我尝试将超时时间延长到 100 秒,并将 max-redirs 限制为 5,没有变化。我尝试ping盒子,也有超时。因此,我将把它提交给 IT 部门,看看他们是否会再看一遍。感谢所有的帮助,希望我能在半小时后回来告诉他们这是他们的问题。

更新 2: 原来我的机器正在使用外部 IP 地址解析服务器名称。当 IT 给我内部 IP 地址并在 cURL 调用中替换它时,一切正常。感谢大家的帮助。

【问题讨论】:

    标签: php linux curl centos


    【解决方案1】:

    在您的 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 在详细/文件输出前添加时间戳

    【讨论】:

    • 好的,这给了我更多信息,但不多。它只是说: * 即将 connect() 到 [服务器名称] 端口 443 * 正在尝试 [服务器的 IP 地址]... 然后它就挂了。在我看来,这是一个连接问题。还有其他想法吗?我现在正在尝试 Pekka 的答案。
    • 添加了一些命令行细节。您是否尝试过设置更高的时间限制以查看它是否会返回?使用set_time_limit(600) 设置为 10 分钟
    • 你能ping通IP地址吗?听起来像网络/防火墙问题。如果不能,您可以直接将其发回给您的 IT 人员并告诉他们进行分类!
    • @Senor 当我看到端口 443 时,它确实可能是一个不受信任的证书问题。您可以尝试使用 80 端口来搞笑吗?
    • CURLOPT_STDERR 选项采用打开文件指针,而不是表示文件路径的字符串:php.net/manual/en/function.curl-setopt.php
    【解决方案2】:

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

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

    更新:这仅适用于您使用 exec 在外部运行 curl - 可能不适用。

    【讨论】:

    • 我正在使用 PHP 函数,所以我猜它不适用。不过,请记住这一点。
    【解决方案3】:

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

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

    【讨论】:

    • 除非我错了,这只有在建立连接时才有用,对吧?
    【解决方案4】:

    您是否尝试过设置 CURLOPT_MAXREDIRS?我发现,对于一些普通浏览器用户看不到的网站,有时会出现“无限”重定向循环。

    【讨论】:

    • 好主意,但并没有改变任何东西。仍然只是超时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多