PHP cURL выдает только по некоторым запросам - PullRequest
0 голосов
/ 27 октября 2018

Добрый день ..

У меня есть веб-приложение, которое отправляет запросы на другой сервер через прокси.Теперь я бы сказал, что 99% этих запросов работают совершенно нормально, и у меня нет никаких проблем, и я получаю ответ обратно.

Однако некоторые запросы (опять-таки очень мало) возвращают HTTP-код ответа 0, которыйозначает скручивание не удалось.После отладки с помощью 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
                ));

Должен ли я просто добавить повторную попытку curl, если в ответе ничего нет / code = 0?

Спасибо.

1 Ответ

0 голосов
/ 27 октября 2018

да, просто повторите один или два раза и знайте, что вы не одиноки, я написал это некоторое время назад:

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