15

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"=>falsefile_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 でこれに遭遇した人はいますか? デバッグする方法はありますか?

4

5 に答える 5

1

これが実際に役立つかどうかはわかりませんがSSL、オプション配列からオプションを削除してみてください。

この背後にある理由: http://www.php.net/manual/en/context.ssl.phpによるverify_peerfalse、デフォルトです。

allow_self_signedREQURESverify_peerでありfalse、デフォルトです。

上記から、 のallow_self_signed設定をおそらくオーバーライドすることがわかりますverify_peer

SSLそのため、 のオプションなし、または なしで試してみallow_self_signedてください。

于 2013-03-07T06:55:41.847 に答える
0

これをWiresharkでデバッグしてみてください。何が問題なのかをよりよく理解できるかもしれません。どの SSL エラーが発生したかを確認する必要があります。

于 2013-03-03T01:25:56.540 に答える
0

このコードを試してください:

$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);
}

エラーが発生しない場合、(file_get_contents を使用した) 問題はクライアントの php 構成であると思います。それ以外の場合は、サーバー構成からです。

于 2013-03-07T09:00:08.367 に答える
-1

これだけインストール

yum install ca-certificates.noarch
于 2016-07-31T13:14:33.333 に答える