web-dev-qa-db-de.com

Der Socket-Transport "https" konnte nicht gefunden werden

Ich verwende dies, um die Verfügbarkeit einer URL zu überprüfen:

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

und ich bekomme diesen Fehler zurück ...

Warnung: fsockopen () [function.fsockopen]: Keine Verbindung zu https://example.com/soapserver.php:443 (Sockettransport "https" kann nicht gefunden werden. Haben Sie vergessen zu aktivieren wenn Sie PHP konfiguriert haben?) in C:\Home etc etc ....

Ich verwende übrigens einen IIS -Server (nein, ich mache das nicht!), Also denke ich, es hat etwas damit zu tun, dass ich kein open-ssl habe, aber ich bin mir nicht sicher. Kann jemand bitte helfen? 

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

Irgendwelche Ideen?

33
Chris J Allen

auch für ssl müssen Sie dem Host ssl: // voranstellen

13
Martijn Laarman

Kommentieren Sie die Zeile aus: extension=php_openssl.dll in php.ini

46
Sérgio

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

Handbuchseite für fsockopen. Schauen Sie sich Beispiel 1 an.

28
tvanfosson

Angenommen, Sie wollten die NY Times nutzen, die HTTPS erzwingt:

Falsch:

$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() keine URLs spricht.

3
Nino Škopac

Der Wechsel zu ssl:// hat für mich funktioniert, aber ich habe immer eine schlechte Antwort erhalten. Ich stellte fest, dass ich eine weitere Zeile hinzufügen musste, um meinen Host-Header explizit zu deklarieren, wie in here beschrieben, und sicherstellen, dass ich mein HTTP von HTTP/1.0 zu HTTP/1.1 aktualisiert habe:

$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Host: www.sandbox.Paypal.com\r\n";
1
Tony Schmidt

Prüfen Sie, ob curl installiert ist oder nicht, ob es nicht installiert ist. Wenn es nicht installiert ist, installieren Sie curl . Für Windows. Kommentieren Sie die Zeile: extension = php_openssl.dll in php.ini, Für Ubuntu Sudo apt-get install php -curl

0
S.Abbu