带有 https 主机的 file_get_contents 工作得很好,除了特定的主机(来自某些公司的测试 api 服务器 - ip 白名单,不能给你测试的 URL)。这排除了未加载的 https 模块和其他初始设置错误。
我已经测试了多个 PHP 安装,都在 v5.3.3、32 位、Debian 32 位。
该请求适用于 cURL,但前提是设置curl_setopt($curl,
CURLOPT_SSL_VERIFYPEER, 0);
. 但是,设置verify_peer"=>false
file_get_contents 的上下文似乎没有什么区别。
使用 file_get_contents,完全相同的请求(相同的 URL,相同的 XML POST 数据)因SSL 失败:对等连接重置:
$arrContextOptions=array(
"http" => array(
"method" => "POST",
"header" =>
"Content-Type: application/xml; charset=utf-8;\r\n".
"Connection: close\r\n",
"ignore_errors" => true,
"timeout" => (float)30.0,
"content" => $strRequestXML,
),
"ssl"=>array(
"allow_self_signed"=>true,
"verify_peer"=>false,
),
);
file_get_contents("https://somedomain:2000/abc/", false, stream_context_create($arrContextOptions));
.
有人用 file_get_contents 遇到过这个问题吗?任何想法如何调试?