1

我们编写了一个通过 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)如果问题不在于编码,我们如何检查上游连接。您如何检测实际断开连接的位置和原因?

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

谢谢

山姆

4

1 回答 1

0

您还需要设置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
    ));
}

看看究竟是什么失败了。

于 2012-10-03T00:15:09.753 回答