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,

Другие вопросы по тегам