无法使curl_exec针对HTTPS url工作


Cannot get curl_exec to work against HTTPS url

我正在尝试使用PHP curl_exec从使用HTTPS协议的网站获取一些信息。我在windows服务器上使用PHP。

我在尝试让SSL正常工作时遇到了一些重大问题。

这是我的代码:

$url = 'https://www.dublinairport.com/flight-information/live-departures';
$curl_handle=curl_init(); 
curl_setopt($curl_handle, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
curl_setopt($curl_handle, CURLOPT_URL,$url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($curl_handle, CURLOPT_TIMEOUT, 2000);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
$raw = curl_exec($curl_handle);
echo curl_error($curl_handle);
curl_close($curl_handle);

我从这里拿到了证书https://curl.haxx.se/ca/cacert.pem

我刚刚从那里复制了文本,并使用文本编辑器将其保存为.pem文件,这应该是正确的吗?

我遇到的问题是:

连接到www.dublinairport.com:443 时出现未知SSL协议错误

我在stackoverflow上尝试了其他几种解决方案,包括强制SSL版本为1、2和3。

有关更多信息,当我尝试点击https:google.com时,我会得到一个不同的错误,如下所示:

SSL证书问题,请验证CA证书是否正常。详细信息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败的

所以我不知道下一步应该采取什么措施来解决这个问题?

对我有用。可能不是你想听到的答案。:)

要回答您的第一个问题,可以通过文本编辑器将CA证书放入文件中。起初我认为这可能是Windows的行尾问题,但我确认curl既适用于UNIX,也适用于Windows(可能也是Mac,但该系统与此问题无关)。

回答你的第二个问题。首先,我将调试添加到您的脚本中:

$url = 'https://www.dublinairport.com/flight-information/live-departures';
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($handle, CURLOPT_VERBOSE, true);
$verbose = fopen('php://temp', 'w+');
curl_setopt($handle, CURLOPT_STDERR, $verbose);
$raw = curl_exec($curl_handle);
if (false === $raw) {
    var_dump(curl_error($curl_handle));
    rewind($verbose);
    var_dump(stream_get_contents($verbose));
} else {
    var_dump($raw);
}
curl_close($curl_handle);

其次,我会检查是否有任何中介机构代理您的请求。我只看到过"未知SSL协议错误",当我与一个据称安全的网站的连接被一个非安全的询问代理拦截时(想想要求我的浏览器在使用有线服务之前接受服务条款的代理)。这里的情况可能就是这样,(a)错误会给您显式的端口号,即使您隐式地指定了它;(b)这种情况发生在多个站点上。

简而言之,我不认为这是一个代码问题。我认为这是一个从你的服务器向外的网络问题。