Estoy ejecutando PHP 5.2.6 en Windows, tengo extension=php_curl.dll
y extension=php_openssl.dll
sin comentarios en php.ini; como tal, puedo ver lo siguiente en phpinfo
:¿Cómo obtengo SSL trabajando en 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
No estoy seguro de que tener activado el enrollamiento es vital para esto, pero ya que se menciona OpenSSL que pensé en lo incluyo aquí de todos modos para la integridad.
Lo que quiero hacer es simple: hacer una petición POST a otro servidor a través de SSL usando fsockopen
.
Mi código hasta ahora es la siguiente:
$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;
}
Esto funciona bien, por supuesto, si sólo pase en $host
y utilizar el puerto 80. Pero realmente tengo que enviar este a través de SSL, y en este momento no está funcionando. $response
se establece en false
, $errno
se queda en 0
, y $errstr
se establece en php_network_getaddresses: getaddrinfo failed: No such host is known.
. Sé que no es un problema que el servidor esté inactivo, o un error tipográfico en el nombre de host, etc., porque SÍ funciona si reviso el puerto 80 de forma no segura. Los problemas solo comienzan cuando intento cambiar a SSL.
¿Qué debo hacer para que esto funcione?
No está realmente relacionado con la respuesta, pero ¿ha considerado usar el protocolo tls en su lugar? TLSv1 es esencialmente la cuarta versión de SSL, y la ha reemplazado ampliamente como la implementación de facto de SSL. – Powerlord