Как заставить SSL работать в fsockopen?

Я запускаю PHP 5.2.6 в Windows, у меня есть 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 

Я не уверен, что включение cURL имеет жизненно важное значение для этого, но поскольку он упоминал OpenSSL, я думал, что я включу его здесь в любом случае для полноты.


То, что я хочу сделать, просто: сделайте запрос POST на другой сервер через SSL, используя 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; } 

Конечно, это нормально работает, если я просто передаю $host и использую порт 80. Но мне действительно нужно отправить это через SSL, и сейчас он не работает. $response получает значение false , $errno остается $errstr 0 , а $errstr получает значение php_network_getaddresses: getaddrinfo failed: No such host is known. , Я знаю, что это не проблема с сервером, или опечатка в имени хоста и т. Д., Потому что он работает, если я перехожу через порт 80 безотказно. Проблемы возникают только при попытке перейти на SSL.

Что я делаю, чтобы заставить это работать?

Это может показаться очевидным, но попробовали ли вы это?

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

Я не уверен, требуется ли // или нет, но в примерах ssl и tls на странице PHP Internet Transports есть их.

PS У меня также есть «вещь» о включенных переменных в строках, в случае, если вам интересно, почему она теперь использует конкатенацию строк.