【问题标题】:PHP cURL issues only on some requestsPHP cURL 仅在某些请求上出现问题
【发布时间】:2019-03-31 22:55:51
【问题描述】:

美好的一天..

我有一个网络应用程序,它通过代理向另一台服务器发出请求。现在我会说这些请求中有 99% 都可以正常工作,我从来没有遇到过任何问题并收到回复。

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

  1. OpenSSL SSL_connect:SSL_ERROR_SYSCALL 连接到 URL。
  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 exec 重试?

谢谢。

【问题讨论】:

标签: php curl error-handling timeout


【解决方案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 () );
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2018-12-04
    相关资源
    最近更新 更多