PHP cURL仅在某些请求上出现问题

时间:2018-10-27 11:07:46

标签: php curl error-handling timeout

美好的一天。

我有一个Web应用程序,可以通过代理向另一台服务器发出请求。现在我要说这些请求中有99%完全可以正常工作,但我没有任何问题,可以收到回复。

但是,某些请求(再次很少)将返回HTTP响应代码0,这意味着curl失败。使用curl_error调试后,我收集了这2个错误。

  1. OpenSSL SSL_connect:与URL连接的SSL_ERROR_SYSCALL。
  2. 操作在7000毫秒后超时,收到0字节中的0字节

现在第二个是不言而喻的。当然,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执行重试吗?

谢谢。

1 个答案:

答案 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 () );
    }
}