2008-12-18 22 views
31

estoy usando esto para comprobar la disponibilidad de una URL:No es posible encontrar el transporte toma "https"

$fp = fsockopen($url, 443, $errno, $errstr); 

y me sale este error de vuelta ...

Advertencia: fsockopen() [function.fsockopen]: no se puede conectar a https://example.com/soapserver.php:443 (no se pudo encontrar el transporte de socket "https" - ¿Olvidaste habilitarlo cuando configuraste PHP?) en C: \ Home etc etc ....

Estoy usando un servidor IIS por cierto, (no, no es mi trabajo!) así que creo que es algo relacionado con no tener open-ssl, pero no estoy seguro. ¿Alguien puede ayudar, por favor?

Hice un phpinfo() y tengo ssl, pero en IMAP y cURL, eso es todo.

¿Alguna idea?

Respuesta

12

también para SSL que necesita para prefijar el host con ssl: //

+0

Esta es la verdadera respuesta, pero tvanfosson aclaró que:) – Jay

26

Debe usar solo el nombre de host, no la URL en la llamada fsockopen. Tendrá que proporcionar el uri, menos el host/puerto en los encabezados HTTP reales. Como señaló @Martijin, y como se detalla en la página del manual, deberá introducir el nombre de su servidor con ssl: // para SSL o tls: // si usa la seguridad de la capa de transporte.

Manual page para fsockopen. Mira el Ejemplo # 1.

45

Elimine la línea: extension=php_openssl.dll en php.ini

0

Verificar rizo instalados o no para php. si no está instalado instale el rizo. para Windows elimine la línea: extension = php_openssl.dll en php.ini, para ubuntu sudo apt-get install php-rizo

2

Digamos que usted quiere agarrar New York Times, que hace cumplir HTTPS:

incorrecta :

$client = stream_socket_client('https://www.nytimes.com', $errno, $errstr, 30);

correcta:

$client = stream_socket_client('tcp://www.nytimes.com:443', $errno, $errstr, 30);

Nota He reemplazado https:// con tcp:// y anexé el puerto 443 al nombre de host.

Supongo que podemos decir que stream_socket_client() no habla las URL.

+1

Es difícil de imaginar que estuve luchando contra IIS hace 9 años, explosión del pasado ... –

+0

@Chris J Allen debe haber sido momentos desesperados –

0

Cambiando a ssl:// funcionó para mí pero seguí recibiendo una respuesta MALA PETICIÓN. Me di cuenta que tenía que añadir una línea más a declarar explícitamente mi encabezado de host tal como se describe here y asegurarse de que he actualizado mi HTTP desde HTTP/1.0 a HTTP/1.1:

$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n"; 
$header .= "Host: www.sandbox.paypal.com\r\n"; 
Cuestiones relacionadas