ich zur Zeit der Programmierung über einen Proxyserver httplib, und wenn ich versuche, auf HTTPS-Websites (wie Facebook und Google) mein Client sendet mir „CONNECT“ Anforderungen, die wie folgt aussehen zu verbinden:Wie reagiere ich auf eine "CONNECT" -Methode Anfrage in einem Proxy-Server mit Socket in Python?
CONNECT www.google.co.il:443 HTTP/1.1\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0\r\n
Proxy-Connection: keep-alive\r\n
Connection: keep-alive\r\n
Host: www.google.co.il:443\r\n
\r\n
I nahm einen funktionierenden Proxy aus dem Internet und legt sie auf, schnupperte dann das Netzwerk auf wireshark, und die Antwort auf diese Anforderung sollte so aussehen:
HTTP/1.1 200 Connection established\n
Proxy-agent: Python Proxy/0.1.0 Draft 1\n
\n
ich bemerkte, dass der Client die Anforderung an den Proxy sendet selbst, Also entschied ich mich, Socket zu verwenden und die Antwort auf diese Weise an den Client zu senden:
if getmethod(clientreq) is "CONNECT":
text="HTTP/1.1 200 Connection established\nProxy-Agent: THE BB Proxy\n\n"
client.send(text)
Ich hatte wirklich gehofft, dass die Lösung, diese „CONNECT“ Anfragen Handhabung wäre und dass mein Server wird schließlich von HTTPS-Anfragen kümmern, aber es funktioniert nicht, und die Antwortpakete, die ich an den Client senden don‘ t sogar auf wireshark erscheinen.
Also meine Fragen sind: 1. Was macht die "CONNECT" -Methode wirklich? 2. Was brauche ich noch, außer die "CONNECT" -Methodenanforderungen zu bearbeiten, um mit einem HTTPS-Server zu kommunizieren?
Für die korrekte Verwendung von CONNECT siehe [RFC2817] (https://www.ietf.org/rfc/rfc2817.txt) –
Für die tl; dr-Version, 'CONNECT' im Wesentlichen einen Tunnel zwischen dem Client und dem Ursprung Server. Sie müssen I/O-Multiplexing verwenden (z. B. mit dem 'select'-Modul oder etwas wie Twisted), um dies korrekt zu implementieren. –
Ich habe das gleiche getan und festgestellt, dass der SSL-Handshake tatsächlich versucht wurde; aber in meinem Fall stoppte der Handshake in der Mitte nach dem Client hallo, Server hallo und Server-Zertifikat (Exchange-Server-Schlüssel) ... die Clinet gesendet Client Key Exchange und Cipher Spec Change-Anfrage aber überraschenderweise nicht erreicht, dass der Proxy oder der Proxy gegessen up diese Nachricht. und ich stecke dort fest. Wenn Sie den HTTPS-Proxy weiter entwickelt und implementiert haben, würden Sie Ihre Erfahrungen darüber, wie Sie das Problem, das Sie in dem Beitrag erwähnt haben, überwunden haben, gerne teilen? danke, Samba – Saasira