【问题标题】:cURL connection drops despite being set to indefinate尽管设置为无限期,但 cURL 连接仍断开
【发布时间】:2012-10-03 00:09:35
【问题描述】:

我们编写了一个通过 cURL 连接到 API 的 php/ajax 应用程序。我们构建它以无限期地保持联系,它运行良好,我们很高兴,定期使用它,然后转移到其他项目。

我们最近重新访问了它,发现它已经开始以不同的时间间隔超时。我们检查了脚本,寻找可能影响 cURL 调用的任何内容。没有。

我们在简单的 cURL 脚本中拥有并且拥有这些选项:

$sch = curl_init();
curl_setopt( $sch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($sch, CURLOPT_URL, $test_url);
curl_setopt($sch, CURLOPT_WRITEFUNCTION, 'get_data');
curl_setopt($sch, CURLOPT_NOSIGNAL, 1);
curl_setopt($sch, CURLOPT_TIMEOUT,0);
$output = curl_exec($sch); 

我的理解是 NOSIGNAL 和 TIMEOUT 选项的效果是保持我们的连接打开的原因。

但它不起作用。

我有两个问题。
1)关于编码的任何想法,我们在 cURL 中缺少的任何东西,或者代码中的其他地方是否有可能影响连接的东西?什么会影响连接?
2)如果问题不在于编码,我们如何检查上游连接。您如何检测实际断开连接的位置和原因?

感谢您的建议,如果您有任何问题或需要其他信息,请随时发布。

谢谢

山姆

【问题讨论】:

    标签: php curl connection


    【解决方案1】:

    您还需要设置CURLOPT_CONNECTTIMEOUT

    curl_setopt($sch, CURLOPT_CONNECTTIMEOUT,0);
    

    另外,尝试添加

    if (curl_errno($sch) > 0) {
        error_log(sprintf(
            "Curl error %d: %s for %s\n", 
            curl_errno($sch), 
            curl_error($sch), 
            $test_url
        ));
    }
    

    看看到底是什么失败了。

    【讨论】:

    • 感谢罗斯 - 我们在脚本中没有连接超时,因为连接没有问题。问题是保持联系。不过,我确实将它插入到我们的脚本中,但它仍然在 30-120 秒后断开连接。我们也有脚本来检查 curl_error。感谢您的回答。
    • 它是在所有 url 上发生,还是仅在某些 url 上发生? CURL 的确切错误信息是什么?
    • 您无意中为我们指明了正确的方向,我们不再认为 cURL 存在故障。在尝试打印 curl_errors 时,我注释掉了 'curl_setopt($sch, CURLOPT_WRITEFUNCTION, 'get_data');'以防止它在执行 curl_exec 时运行。 CURL 连接并保持连接状态。我们过早指责 cURL,我们错了。谢谢你帮助罗斯,很抱歉我没有对此事进行尽职调查。
    猜你喜欢
    • 1970-01-01
    • 2020-12-17
    • 2021-04-05
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2013-03-29
    • 1970-01-01
    相关资源
    最近更新 更多