2008-12-18 6 views
31

Ich verwende dies zu überprüfen die Verfügbarkeit einer URL finden:Kann nicht den Socket-Transport "https"

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

und ich bekomme diese Fehlermeldung zurück ...

Warning: fsockopen() [function.fsockopen]: Verbindung mit https://example.com/soapserver.php:443 nicht möglich (Kann nicht finden Sie den Socket-Transport "https" - vergessen Sie es zu aktivieren, wenn Sie PHP konfiguriert?) in C: \ Home etc etc ....

Ich benutze einen IIS-Server btw, (nein, es ist nicht meine Arbeit!) also denke ich, dass es etwas damit zu tun hat, dass ich kein Open-SSL habe, aber ich bin mir nicht sicher. Kann mir bitte jemand helfen?

Ich habe eine phpinfo() und ich habe ssl, aber auf IMAP und cURL, das ist alles.

Irgendwelche Ideen?

Antwort

12

auch für ssl müssen Sie den Host mit ssl Präfix: //

+0

Das ist die richtige Antwort, aber tvanfosson geklärt es:) – Jay

26

Sie sollten nur den Hostnamen und nicht die URL im fsockopen-Aufruf verwenden. Sie müssen die URL angeben, abzüglich des Hosts/Ports in den tatsächlichen HTTP-Headern. Wie @Martijin angemerkt hat und wie in der Manualseite aufgeführt, müssen Sie Ihren Hostnamen mit ssl: // für SSL oder tls: // voranstellen, wenn Sie die Transportschichtsicherheit verwenden.

Manual page für fsockopen. Schau dir Beispiel 1 an.

45

Kommentar- die Zeile: extension=php_openssl.dll in php.ini

0

prüfen curl installiert oder nicht für PHP. Wenn es nicht installiert ist, installieren Sie die Locke. für Fenster Kommentar- der Zeile: extension = php_openssl.dll in der php.ini, sudo für ubuntu apt-get php-curl

2

der Installation Lassen Sie sagen, Sie New York Times greifen wollte, die HTTPS erzwingt:

Falsche :

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

Richtig:

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

Hinweis Ich habe https:// durch tcp:// ersetzt und den Port 443 an den Hostnamen angehängt.

Ich denke, wir können sagen, dass stream_socket_client() URLs nicht spricht.

+1

Kaum vorstellbar, dass ich vor 9 Jahren gegen IIS gekämpft habe, eine Explosion aus der Vergangenheit ... –

+0

@Chris J Allen müssen verzweifelte Zeiten gewesen sein –

0

Die Umstellung auf ssl:// funktionierte für mich, aber ich bekam immer eine schlechte Antwort. Ich fand, dass ich brauchte eine weitere Zeile hinzufügen explizit beschrieben here meine Host Header zu erklären und dafür sorgen, dass ich meine HTTP von HTTP/1.0 zu HTTP/1.1 aktualisiert haben:

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