我在Windows上运行PHP 5.2.6,我有extension=php_curl.dll
和extension=php_openssl.dll
注释掉在php.ini;因此我可以看到phpinfo
如下:如何在fsockopen中使用SSL?
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
我不知道那有卷曲启用的是这一重要的,但因为它提到的OpenSSL我想我会在这里有也无妨的完整性。
我想要做的是简单的:做一个POST请求使用fsockopen
SSL上的另一台服务器。
到目前为止我的代码是这样的:
$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
被在0
设置为false
,$errno
住宿,并$errstr
被设置为php_network_getaddresses: getaddrinfo failed: No such host is known.
。我知道这不是服务器关闭的问题,或主机名称中的错字等,因为如果我不安全地通过端口80,它会工作。这些问题只在我尝试切换到SSL时开始。
我该怎么做才能做到这一点?
没有真正与答案有关,但你有没有考虑过使用tls协议呢? TLSv1实质上是SSL的第四个版本,并已广泛取代它作为事实上的SSL实现。 – Powerlord 2009-11-23 16:15:48