2013-10-04 77 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该网站。