soa*_*gem 19 php ssl openssl fsockopen
我在Windows上运行PHP 5.2.6,我extension=php_curl.dll和extension=php_openssl.dll在php.ini中取消注释; 因此,我可以看到以下内容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
Run Code Online (Sandbox Code Playgroud)
我不确定启用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;
}
Run Code Online (Sandbox Code Playgroud)
如果我只是传入$host并使用端口80,这当然可以正常工作.但我真的需要通过SSL发送它,而现在它不起作用.$response设置为false,$errno保持0,并$errstr设置为php_network_getaddresses: getaddrinfo failed: No such host is known..我知道这不是服务器故障的问题,也不是主机名中的拼写错误等问题,因为如果我不安全地通过端口80,它会起作用.问题只有在我尝试切换到SSL时才会开始.
我该怎么做才能让这个工作?
Pow*_*ord 52
这可能听起来很明显,但你试过这个吗?
if ($fp = fsockopen('ssl://'. $host, 443, $errno, $errstr, 30)) {
Run Code Online (Sandbox Code Playgroud)
我不知道,如果//需要与否,但ssl和tls上例PHP Internet传输网页有他们.
PS我还有一个关于字符串中包含变量的"东西",如果你想知道为什么它现在使用字符串连接.
| 归档时间: |
|
| 查看次数: |
33651 次 |
| 最近记录: |