Goutte - ошибка версии протокола TLSv1
Я использую Goutte, чтобы получить страницу на веб-сервере, используя сертификат SSL. Всякий раз, когда я пытаюсь получить эту страницу, выдается следующее исключение:
Uncaught exception 'Guzzle\\Http\\Exception\\CurlException' with message
'[curl] 35: error:1407742E:SSL
routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
[url] https://somesite.com
Я искал онлайн для этого типа ошибки. Кажется, что эта ошибка происходит при сбое рукопожатия. Сервер поддерживает TLSv1, а клиент использует SSL23.
Я не уверен, что эта оценка верна, и я не знаю, как ее исправить.
Это код, который я сейчас использую:
<?php
use Goutte\Client;
$client = new Client();
$guzzle = $client->getClient();
$guzzle->setConfig(
array(
'curl.CURLOPT_SSL_VERIFYHOST' => false,
'curl.CURLOPT_SSL_VERIFYPEER' => false,
)
);
$client->setClient($guzzle);
$crawler = $client->request('GET', 'https://somesite.com'); // IT FAILS HERE
ОБНОВИТЬ:
ПРИМЕЧАНИЕ. Несколько недель назад я начал получать похожую ошибку, поэтому решил обновить вопрос и ответить, поскольку они связаны между собой.
Я получил похожую ошибку:
[curl] 35: Unknown SSL protocol error in connection to website.com:443
1 ответ
Я нашел ответ на эту проблему в посте " Исправление рукопожатия SSL с PHP5 и Curl"
Эта ошибка может возникать в некоторых операционных системах, но не во всех, что затрудняет ее копирование. В настоящее время я использую Ubuntu 12.04 в своей среде разработки.
К счастью, это то, что можно решить на уровне кода следующим образом:
use Goutte\Client;
$client = new Client();
$guzzle = new GuzzleClient('https://somesite.com', array(
'curl.options' => array(
'CURLOPT_SSLVERSION' => 'CURL_SSLVERSION_TLSv1',
)
));
$client->setClient($guzzle);
$crawler = $client->request('GET', 'https://somesite.com');
ОБНОВИТЬ:
Для решения для сообщения
[curl] 35: Unknown SSL protocol error in connection to website.com:443
было немного сложно решить, так как сообщение не указывает на то, что происходит.
Этот вопрос GitHub указал мне правильное направление. Есть несколько версий CURLOPT_SSLVERSION, которые я могу использовать (конечно!), Но они включают v1.0, v1.1 и v1.2! Смотрите curl_setopt для получения дополнительной информации.
Для этой конкретной ошибки я использовал следующий код:
$guzzle = new GuzzleClient('https://somesite.com', array(
'curl.options' => array(
'CURLOPT_SSLVERSION' => 'CURL_SSLVERSION_TLSv1_1',
)
));
Сайт, к которому я пытался подключиться, не принимает никаких других вариантов, включая CURL_SSLVERSION_TLSv1
,