我一直在使用以下代码块来使用cURL从HTTPS网站收集数据.
$q = 'https://www.example.org/'; // for example
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $q);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$json = curl_exec($ch);
Run Code Online (Sandbox Code Playgroud)
cURL显示以下错误
error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 unrecognized name
Run Code Online (Sandbox Code Playgroud)
这可能与较旧的OpenSSL版本有关,但由于网站位于共享主机中,因此目前无法更改服务器端设置.我所能做的就是改变cURL参数.
我在这里检查了https://www.ssllabs.com/ssltest/analyze.html以查看该服务器的可用协议,发现SSL3和SSL2不可用,但TLS 1.2,TLS 1.1和TLS 1.0可用.通过谷歌搜索,我发现最好没有指定SSL版本,它实际上是自动协商使用的最佳级别.虽然,我尝试在CURLOPT_SSLVERSION中设置TLS版本(如下所示),但发生了同样的错误.
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
Run Code Online (Sandbox Code Playgroud)
过去几天我一直在努力,但所有的尝试都是徒劳的.
我试图解释我所做的所有事情,但是有人请问是否需要更多信息.任何帮助将不胜感激.
非常感谢
这可能是 cURL #1037 Bug http://sourceforge.net/p/curl/bugs/1037/
当您使用过时的 openssl 0.9.8 cURL 连接到某些带有 openssl 1.0.x 的服务器并使用 SNI 时,似乎会发生这种情况。
| 归档时间: |
|
| 查看次数: |
3521 次 |
| 最近记录: |