Я использую 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
остается на 0
, а $errstr
устанавливается на php_network_getaddresses: getaddrinfo failed: No such host is known.
. Я знаю, что проблема не в том, что сервер не работает или опечатка в имени хоста и т. Д., Потому что он работает, если я перехожу через порт 80 небезопасно. Проблемы начинаются только тогда, когда я пытаюсь перейти на SSL.
Что мне сделать, чтобы это работало?