无法使 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);
我从这里获得了 ca 证书 - https://curl.haxx.se/ca/cacert.pem
我只是从那里复制文本并使用文本编辑器将其保存为 .pem 文件,应该没问题吧?
我遇到的问题是:
Unknown SSL protocol error in connection to www.dublinairport.com:443
我在 Whosebug 上尝试了其他几种解决方案,包括将 SSL 版本强制设置为 1、2 和 3。
有关更多信息,当我尝试点击 https:google.com 时,我得到了如下不同的错误:
SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate
verify failed
所以我不知道接下来应该采取什么措施来尝试解决这个问题?
适合我。可能不是您想听到的答案。 :)
要回答您的第一个问题,是的,可以通过文本编辑器将 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);
其次,我会检查是否有代理您请求的中介机构。我只看到 "Unknown SSL protocol error" 当我与一个据称安全的站点的连接被一个不安全的询问代理拦截时(想想一个要求我的浏览器在使用有线服务之前接受服务条款的代理)。这可能就是这种情况,正如 (a) 所证明的那样,错误为您提供了 explicit 端口号,即使您 implicitly 指定了它并且(b) 它发生在多个网站上。
总之,我认为这不是代码问题。我认为这是您服务器外部的网络问题。
我正在尝试使用 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);
我从这里获得了 ca 证书 - https://curl.haxx.se/ca/cacert.pem
我只是从那里复制文本并使用文本编辑器将其保存为 .pem 文件,应该没问题吧?
我遇到的问题是:
Unknown SSL protocol error in connection to www.dublinairport.com:443
我在 Whosebug 上尝试了其他几种解决方案,包括将 SSL 版本强制设置为 1、2 和 3。
有关更多信息,当我尝试点击 https:google.com 时,我得到了如下不同的错误:
SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
所以我不知道接下来应该采取什么措施来尝试解决这个问题?
适合我。可能不是您想听到的答案。 :)
要回答您的第一个问题,是的,可以通过文本编辑器将 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);
其次,我会检查是否有代理您请求的中介机构。我只看到 "Unknown SSL protocol error" 当我与一个据称安全的站点的连接被一个不安全的询问代理拦截时(想想一个要求我的浏览器在使用有线服务之前接受服务条款的代理)。这可能就是这种情况,正如 (a) 所证明的那样,错误为您提供了 explicit 端口号,即使您 implicitly 指定了它并且(b) 它发生在多个网站上。
总之,我认为这不是代码问题。我认为这是您服务器外部的网络问题。