美好的一天。
我有一个Web应用程序,可以通过代理向另一台服务器发出请求。现在我要说这些请求中有99%完全可以正常工作,但我没有任何问题,可以收到回复。
但是,某些请求(再次很少)将返回HTTP响应代码0,这意味着curl失败。使用curl_error调试后,我收集了这2个错误。
现在第二个是不言而喻的。当然,SSL错误是由于代理服务器不可靠造成的,否则我将在每个请求中得到此响应,而不仅仅是1%(对于相同的url)?我很确定我的curl配置没问题。 (如下)。
curl_setopt_array($this->ch, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_AUTOREFERER => 1,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => 0,
CURLOPT_ENCODING => 'gzip',
CURLOPT_HEADER => 0
));
如果响应为空/ code = 0,我应该添加curl执行重试吗?
谢谢。
答案 0 :(得分:1)
是的,请重试一次或两次,并且知道您并不孤单,我前些时候写了这篇文章:
echo 'file: ' . $file . ' url: ' . $raw_url . '..' . PHP_EOL;
try {
$headers = implode ( " ", $hc->exec ( $url )->getResponseHeaders () );
} catch ( Exception $ex ) {
try {
$headers = implode ( " ", $hc->exec ( $url )->getResponseHeaders () );
} catch ( Exception $ex ) {
// sometimes connection fails for no good reason, and a retry (or 2) fixes it...
// here we give up and deliberately not catch the 3rd exception (if any)
$headers = implode ( " ", $hc->exec ( $url )->getResponseHeaders () );
}
}