我在Windows上运行PHP 5.2.6,我的php.ini中取消了extension=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,我认为为了完整起见还是包含在这里。
我想做的很简单:使用fsockopen
通过SSL向另一个服务器发出POST请求。
到目前为止,我的代码是这样的:
$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;
}
当然,如果我只传入$host
并使用端口80,那么这可以正常工作。但我真的需要通过SSL发送,但现在它无法正常工作。$response
设置为false
,$errno
保持为0
,$errstr
设置为php_network_getaddresses: getaddrinfo failed: No such host is known.
。我知道这不是服务器宕机或主机名中有拼写错误等问题,因为如果我未加密地使用端口80,则可以正常工作。问题仅在我尝试切换到SSL时开始。
我该怎么做才能让它正常工作?