私は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に切り替えようとしたときにのみ発生します。
これを機能させるにはどうすればよいですか?