Я запускаю PHP 5.2.6 на Windows, у меня есть extension=php_curl.dll
и extension=php_openssl.dll
раскомментирован в php.ini; как таковой, я могу увидеть следующее phpinfo
:Как заставить SSL работать в fsockopen?
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.
Что мне делать, чтобы получить эту работу?
Не имеет отношения к ответу, но вы считали, что вместо этого используете протокол tls? TLSv1 по сути является четвертой версией SSL и широко заменил его как фактическую реализацию SSL. – Powerlord