【发布时间】:2013-02-25 21:28:13
【问题描述】:
带有 https 主机的file_get_contents 工作得很好,除了特定的主机(来自某些公司的测试 api 服务器 - ip 白名单,不能给你测试的 URL)。这排除了未加载的 https 模块和其他初始设置错误。
我已经测试了多个 PHP 安装,都在 v5.3.3、32 位、Debian 32 位。
请求适用于 cURL,但前提是设置 curl_setopt($curl,
CURLOPT_SSL_VERIFYPEER, 0);。但是,在 file_get_contents 的上下文中设置 verify_peer"=>false 似乎没有任何区别。
使用 file_get_contents,完全相同的请求(相同的 URL,相同的 XML POST 数据)失败,SSL: Connection reset by peer:
$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 时遇到过这种情况? 有任何调试方法的想法吗?
【问题讨论】:
-
您是否尝试将
allow_self_signed设置为false? -
刚刚试了一下,同样的错误。
-
为什么不直接使用 cURL?
-
是的,cURL 似乎是最好的选择。一些谷歌搜索告诉我,其他人也有同样的问题,但无法解决。他们都回到了 cURL。
-
这个问题很晚,但你也可以试试
'verify_peer_name'=>false