我在PHP curl方面遇到了极大的困难。我正试图打开一个网站:https://www.novaprostaffing.com/np/index.jsp通过PHP curl,但它不断产生以下错误:"连接到www.novaprestaffing.com时出现未知SSL协议错误"
我的功能如下:
function getUrl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$buffer = curl_exec($ch);
if (!$buffer)
{
echo "cURL error number:" .curl_errno($ch);
echo " and url is $url and cURL error:" . curl_error($ch);
}
curl_close($ch);
return $buffer;
}
我尝试了多种修复,包括:
- 强制卷曲到版本3
- 设置
CURLOPT_SSL_VERIFYPEER
&CURLOPT_SSL_VERIFYHOST
到0 - 检查是否处于卷曲7.34。有人告诉我这个版本有一个bug,但我现在使用的是卷曲7.19.1
以上都不起作用。如果你有任何想法如何解决这个问题,将不胜感激!
尝试设置cURL选项CURLOPT_SSLVERSION。我不久前也遇到了同样的问题,这对我来说很有用:)
curl_setopt($ch, CURLOPT_SSLVERSION, 3); // 1, 2 or 3
服务器只使用TLS 1.0,尝试使用SSL 2.0或SSL 3.0连接将导致您看到的错误。这意味着将版本设置为3对于这个服务器来说是完全错误的。除此之外,证书链是不完整的。服务器只提供叶证书,而不提供中间证书,直到受信任的根。这将导致验证失败。
您是否尝试过其他https url,看看是否有效?以下是的3个常见原因
- 目标站点不喜欢该协议
- 目标站点不喜欢密码
- SSL私钥已过期