PHPs HTTP-Proxy-Kontext konfiguriert keinen rohen TCP-Stream um
Unterscheiden Sie die Proxy-Optionen des PHP-HTTP-Wrappers von der Protokollarbeit, die bei einer stream_socket_client-TCP-Verbindung nötig ist.
Die Proxy-Option des HTTP-Kontexts gehört zum HTTP-Stream-Wrapper von PHP. Eine rohe TCP-Verbindung, die stream_socket_client erzeugt, wird nicht dadurch zu einem HTTP-Proxy-Client, dass diese Option in einem Kontextobjekt existiert.
Wenn der Code direkt die Zieladresse verbindet, öffnet er diese TCP-Route. Wenn er stattdessen die Proxy-Adresse verbindet, müssen die nächsten Bytes weiterhin das Proxy-Protokoll umsetzen.
Für HTTP CONNECT bedeutet das einen gültigen Zielhost und -port, jede erforderliche Proxy-Authentifizierung, vollständiges Parsen der Antwort und Annahme, bevor das Zielprotokoll beginnt. Ein einzelner fread-Aufruf, der nach einer Erfolgsphrase sucht, ist kein vollständiger Connector. TCP kann eine Antwort über mehrere Lesevorgänge aufteilen oder zusätzliche Bytes zurückgeben, die bewahrt werden müssen.
Bei einem HTTPS-Ziel muss TLS dann durch den aufgebauten Tunnel starten und die Zielidentität prüfen. Der Proxy-Hostname ist nicht die Zertifikatsidentität der Website.
Verwenden Sie einen Client oder Connector mit dokumentierter Unterstützung für das erforderliche Proxy-Protokoll, wenn die Aufgabe einfach ist, eine URL abzurufen. PHPs cURL-Einstellungen für HTTP und SOCKS bieten einen unterstützten Weg zum URL-Abruf. Ein roher Stream ist nützlich, wenn die Anwendung diese Protokollarbeit auf niedrigerer Ebene selbst übernimmt; er sollte nicht stillschweigend Annahmen aus einem unabhängigen HTTP-Wrapper-Beispiel erben.