我正在尝试使用PHP curl_exec从使用HTTPS协议的网站获取一些信息。我在Windows服务器上使用PHP。
我遇到了尝试让SSL正常工作的主要问题。
这是我的代码:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$response = curl_exec($ch);
curl_close($ch);
$json = json_decode($response, true);
//-------------------------------------
$invIndexes = [];
foreach($json->rgInventory as $index){
$invIndexes = $index;
}
//-------------------------------------
$makearray = (array)$invIndexes;
for($id = 0;$id < count($invIndexes);$id++){
$index = $makearray[$id];
$item = $json->rgDescriptions[$json->rgInventory[$index]->classid + "_" + $json->rgInventory[$index]->instanceid];
if($item->tradeable != 1){
continue;
}
$ItemName = $item->market_hash_name;
}
var_dump($ItemName);
我从这里获得了ca证书 - 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:证书 验证失败
所以我不知道下一步应该尝试解决这个问题?
答案 0 :(得分:1)
适合我。可能不是你想听到的答案。 :)
要回答您的第一个问题,是的,通过文本编辑器将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)它正在发生不止一个网站。
简而言之,我认为这不是代码问题。我认为这是您服务器向外的网络问题。