Php 尽管设置为“未定义”,卷曲连接仍会断开
我们编写了一个php/ajax应用程序,它通过cURL连接到API。我们构建它是为了不确定地保持联系,它工作得很好,我们很高兴,定期使用它,然后转移到其他项目 我们最近再次访问了它,发现它开始以不同的时间间隔超时。我们检查了脚本,寻找可能影响cURL调用的任何内容。没什么 在我们的简单cURL脚本中,我们有并且有以下选项:Php 尽管设置为“未定义”,卷曲连接仍会断开,php,curl,connection,Php,Curl,Connection,我们编写了一个php/ajax应用程序,它通过cURL连接到API。我们构建它是为了不确定地保持联系,它工作得很好,我们很高兴,定期使用它,然后转移到其他项目 我们最近再次访问了它,发现它开始以不同的时间间隔超时。我们检查了脚本,寻找可能影响cURL调用的任何内容。没什么 在我们的简单cURL脚本中,我们有并且有以下选项: $sch = curl_init(); curl_setopt( $sch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($sch, CU
$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如果问题不在于编码,我们如何检查上游连接。如何检测连接实际断开的位置和原因
感谢您的建议,如果您有任何问题或需要其他信息,请随时发布
谢谢
Sam您还需要设置CURLOPT_连接超时:
另外,尝试添加
if (curl_errno($sch) > 0) {
error_log(sprintf(
"Curl error %d: %s for %s\n",
curl_errno($sch),
curl_error($sch),
$test_url
));
}
看看到底是什么失败了。谢谢Ross-我们在脚本中没有连接超时,因为连接没有问题。问题是保持联系。不过,我确实在脚本中插入了它,30-120秒后它仍然会断开连接。我们还准备了脚本来检查curl_错误。我们感谢您的回答。它是发生在所有URL上,还是只发生在某些URL上?CURL的确切错误信息是什么?您无意中为我们指出了正确的方向,我们不再相信CURL会失败。在试图打印curl_错误时,我注释掉了'curl_setopt$sch,CURLOPT_WRITEFUNCTION','get_data';'防止它在执行curl_exec时运行。卷曲连接,并保持连接,因为它应该。我们责备cURL太快了,我们错了。谢谢你的帮助,罗斯,很抱歉我没有对此事进行尽职调查。
if (curl_errno($sch) > 0) {
error_log(sprintf(
"Curl error %d: %s for %s\n",
curl_errno($sch),
curl_error($sch),
$test_url
));
}