php - mixto - ¿Cómo puedo hacer que SSL funcione en fsockopen?
error ssl solucion (1)
Estoy ejecutando PHP 5.2.6 en Windows, tengo extension=php_curl.dll
y extension=php_openssl.dll
comentarios en php.ini; Como tal, puedo ver lo siguiente en 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
No estoy seguro de que tener habilitado cURL sea vital para esto, pero como mencioné OpenSSL, pensé que lo incluiría aquí de todas formas para que esté completo.
Lo que quiero hacer es simple: realizar una solicitud POST a otro servidor a través de SSL usando fsockopen
.
Mi código hasta ahora es este:
$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;
}
Por supuesto, esto funciona bien si solo paso $host
y uso el puerto 80. Pero realmente necesito enviar esto a través de SSL, y en este momento no está funcionando. $response
se establece en false
, $errno
permanece en 0
, y $errstr
se configura 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 del host, etc., porque SÍ funciona si me salgo del puerto 80 de forma no segura. Los problemas solo comienzan cuando intento cambiar a SSL.
¿Qué hago para que esto funcione?
Esto puede sonar obvio, pero ¿has probado esto en su lugar?
if ($fp = fsockopen(''ssl://''. $host, 443, $errno, $errstr, 30)) {
No estoy seguro de si el //
es requerido o no, pero los ejemplos de ssl
y tls
en la página de PHP Internet Transports los tienen.
PS También tengo una "cosa" sobre las variables incluidas en las cadenas, en caso de que se esté preguntando por qué usa la concatenación de cadenas ahora.