2013-10-04 86 views
1

我正在使用Goutte在Web服務器上使用SSL證書獲取頁面。每當我試圖讓這個頁面下面的異常被拋出:Goutte - TLSv1協議版本錯誤

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 

UPDATE:

注:我開始在幾個星期前類似的錯誤,所以我想我會更新問題和答案,因爲它們是相關的。

我有一個類似的錯誤:

[curl] 35: Unknown SSL protocol error in connection to website.com:443 

回答

2

我找到了答案,在博客帖子這個問題「Fixing SSL Handshake with PHP5 and 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'); 

UPDATE:

對於該消息

[curl] 35: Unknown SSL protocol error in connection to website.com:443 

有點溶液因爲信息沒有指示發生了什麼,所以很難解決。

This 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該網站。