21

私はWindowsでPHP5.2.6を実行していますが、php.iniextension=php_curl.dllでコメントを外しています。extension=php_openssl.dllそのようなものとして、私は以下を見ることができますphpinfo

curl
cURL support        enabled
cURL Information    libcurl/7.16.0 OpenSSL/0.9.8g zlib/1.2.3

openssl
OpenSSL support     enabled
OpenSSL Version     OpenSSL 0.9.8g 19 Oct 2007

これにcURLを有効にすることが不可欠かどうかはわかりませんが、OpenSSLについて言及しているので、完全を期すためにここに含めると思いました。


私がやりたいのは簡単です。SSLを介して別のサーバーにPOSTリクエストを作成しますfsockopen
これまでの私のコードはこれです:

$host = 'www.redacted.com';
$data = 'user=redacted&pass=redacted&action=redacted';
$response = "";

if ( $fp = fsockopen("ssl:{$host}", 443, $errno, $errstr, 30) ) {

    $msg  = 'POST /wsAPI.php HTTP/1.1' . "\r\n";
    $msg .= 'Content-Type: application/x-www-form-urlencoded' . "\r\n";
    $msg .= 'Content-Length: ' . strlen($data) . "\r\n";
    $msg .= 'Host: ' . $host . "\r\n";
    $msg .= 'Connection: close' . "\r\n\r\n";
    $msg .= $data;
    if ( fwrite($fp, $msg) ) {
        while ( !feof($fp) ) {
            $response .= fgets($fp, 1024);
        }
    }
    fclose($fp);

} else {
    $response = false;
}

もちろん、ポート80を渡して$host使用するだけであれば、これは問題なく機能します。しかし、SSLを介してこれを送信する必要があり、現在は機能していません。$responseに設定されfalse、に$errnoとどまり、0$errstr設定されphp_network_getaddresses: getaddrinfo failed: No such host is known.ます。ポート80を安全に経由しなくても機能するため、サーバーのダウンやホスト名のタイプミスなどの問題ではないことを私は知っています。問題は、SSLに切り替えようとしたときにのみ発生します。

これを機能させるにはどうすればよいですか?

4

1 に答える 1

59

これは当たり前のように聞こえるかもしれませんが、代わりにこれを試しましたか?

if ($fp = fsockopen('ssl://'. $host, 443, $errno, $errstr, 30)) {

//が必要かどうかはわかりませんが、 PHP Internet Transports ページsslのとtlsの例にはそれらがあります。

PS また、文字列連結を使用する理由が疑問に思われる場合に備えて、文字列に含まれる変数に関する「こと」もあります。

于 2009-11-23T16:26:13.097 に答える