solucion mixto habilitar error contenido conexión chrome certificado adm php ssl openssl fsockopen

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.