file_get_contents хост https работает просто отлично, за исключением конкретного хоста (тестовый сервер api из какой-то компании – ip whitelisted, не может дать вам URL для тестирования). Это исключает не загруженные модули https и другие ошибки начальной настройки.
Я тестировал несколько установок PHP, все в версиях v5.3.3, 32 бит, Debian 32bits.
Запрос работает с 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));
,
Кто-нибудь сталкивался с файлом_get_contents? Любые идеи отладки?
попробуйте этот код:
$fp = fsockopen("ssl://somedomain/abc/", 2000 , $ErrNo, $ErrString, 30); if (!$fp) { echo "Error No : $ErrNo - $ErrString <br />\n"; } else { $out = "POST / HTTP/1.1\r\n"; $out .= "Host: somedomain \r\n"; $out .= "Content-Type: application/xml; charset=utf-8;\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); }
если вы не получите ошибку, я думаю, что проблема (с файлом_get_contents) заключается в формировании клиентской php-конфигурации в противном случае из конфигурации сервера.
не знаю, действительно ли это поможет, но попытайтесь удалить параметры SSL
из вашего опционного массива.
Причина этого: согласно http://www.php.net/manual/en/context.ssl.php , verify_peer
по умолчанию является false
.
allow_self_signed
REQUIRES verify_peer
и по умолчанию является false
.
Из вышеизложенного, я понимаю, что allow_self_signed
вероятно, переопределяет вашу настройку для verify_peer
.
Поэтому, пожалуйста, попробуйте без каких-либо параметров для SSL
или без allow_self_signed
, и сообщите нам, помогло ли это кому-либо.
Вы можете попробовать отладить это с помощью Wireshark – вы можете лучше понять, что пойдет не так, вы должны увидеть, какая ошибка SSL возникает.
только установите это
yum install ca-certificates.noarch