错误 - PHP - cURL - 连接中的未知SSL协议错误 -

时间:2018-03-23 08:14:31

标签: php curl

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $xml_url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_HEADER, false);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 0);

$xml = curl_exec($ch);

if(curl_exec($ch) === false) 
{ echo curl_error($ch); }
else 
{ echo 'Operation completed without any errors'; }

curl_close($ch);
return $xml;

以上代码给出了以下错误。

  

与api.site.com:443相关的未知SSL协议错误

根据许多人的建议,下面的代码将解决上述问题,但它没有帮助。仍然得到同样的错误。

curl_setopt ($ch, CURLOPT_SSLVERSION, 3);

我也按照建议在下面尝试但仍然得到相同的错误。

curl_setopt ($ch, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_SSLv3' );

请建议我应该在代码中添加什么来修复此错误。

谢谢,

3 个答案:

答案 0 :(得分:0)

您刚刚忽略了SSL证书验证,可能会帮助您解决问题,请求使用CURL时使用以下代码。

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

答案 1 :(得分:0)

您可以尝试使用此代码。

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $xml_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_HEADER, false);

$xml = curl_exec($ch);

if($xml === false) { 
    echo curl_error($ch); 
}else{ 
    echo 'Operation completed without any errors'; 
}
curl_close($ch);
return $xml;

此外,您可以将此课程用于卷曲请求,

https://gist.github.com/sourovroy/1fba93188470bbe3eefa15cd17533b23

答案 2 :(得分:0)

您可以通过curl verbose模式检查网站使用的TLS版本:

curl_setopt($curl, CURLOPT_VERBOSE, true);

输出将如下所示:

...
SSL connection using TLS1.0 / RSA_3DES_EDE_CBC_SHA1
...

然后像这样设置 CURLOPT_SSL_CIPHER_LIST

curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, "TLSv1");

其中“ TLSv1”是网站使用的TLS版本。

在curl选项中更改SSL版本和VERIFY_PEER / HOST并不能解决我的问题,但是这种方法可以解决。