Schreiben Sie ein C-HTTP-Proxy-Server — gewusst wie: empfangen und weiterleiten einer HTTP-Antwort
Teste ich mit firefox im moment. Der server empfängt eine HTTP-Anforderung von firefox als ein string, und nun bin ich unsicher, was zu tun. Brauche ich, um eine Verbindung zu port 8080 aus und senden Sie die Anfrage als string? Dann lauschen auf port 8080 für eine Antwort? Wenn ja, was wird die Antwort kommen, wie? Ich bin mir nicht sicher, welche Art von Inhalten erwarten. Ein HTML-string? Die ich dann senden Sie zurück zu firefox, auch als string?
Auch, fyi, von anderen zu Lesen, die ich bekommen habe die Idee, dass es viele verschiedene Arten von proxies-- ich weiß nicht, etwas über, die noch. Mein proxy muss nur dienen als Vermittler zwischen dem client und dem internet, die sonst nichts anderes machen.
- Können Sie mehr Klarheit über den Zweck des proxy. Ist es im Grunde nur verstecken die IP-Adresse (oder Griff eine nicht-öffentliche IP auf) die browsing-Maschine? Und gibt es ein bestimmten Grund Sie nicht können oder nicht wollen, verwenden Sie ein off-the-shelf-Lösung wie Squid? Auch ist die Leistung wichtig? (Wenn ja, dies ist ein big job.)
- Es ist ein Klasse Projekt. Muss nur heraus zu filtern, einige domains über Befehl Linie Argumente. Ich bin nicht auf der Suche nach einer code, nur ein allgemeiner Pfad zu Folgen. Und Nein, definitiv keine Leistung. Dies ist eine kleine Sache.
- das ist Hausaufgaben, schaut auf seine Letzte Frage
- sollten Sie wirklich den Austausch einer der tags mit Hausaufgaben
- Okay, zwar habe ich eine Frage: was ist gut, dass tag? Es ist nicht, wie es geht, Menschen zu gewinnen, spezialisiert auf Hausaufgaben, richtig? es hat nicht wirklich helfen.
- Aero, Wenn Sie Fragen Hausaufgaben Fragen, ohne, dass tag, die Leute werden denken, dass Sie unehrlich zu sein, und nicht gewillt zu helfen.
- Das offizielle Urteil ist, dass Hausaufgaben ist veraltet (meta.stackexchange.com/questions/147100/...). Diese Frage kann auf eigenen Beinen stehen, ohne die Hausaufgaben-tag, und daher ist es entfernt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Regeln für die HTTP-proxying sind tatsächlich sehr Komplex. Aber Sie können sich wahrscheinlich Weg mit ignorieren die meisten von Ihnen, vor allem, wenn Sie kümmern sich nicht um die Leistung.
Ersten, die Sie hören werden, auf irgendeinem port. Sie müssen analysieren der Abfrage, die Sie erhalten. Es besteht aus einigen Zeilen, jeweils gefolgt von einem CRLF-paar. Wissen Sie, daß das Ende des query-headers durch zwei CRLF-Paare. Es kann eine Abfrage Körper (wenn dieser POST ist), und Sie wollen nicht zu haben, um zu analysieren, weil es kompliziert ist. So, hier ist, wie Sie fake it:
Überprüfen Sie die Abfrage für jede
Connection
Header. Wenn Sie, entfernen Sie Sie.Stellen Sie eine Verbindung zum server am anderen Ende.
Nachdem Sie senden Sie die Anfrage und die Anfrage-Header, aber bevor das zweite CRLF markiert das Ende der request-Header, fügen Sie ein
Connection: close
header. Senden Sie dann die zweite CRLF.Nun proxy in beide Richtungen. Können Sie einen zusätzlichen Prozess oder zusätzlichen thread, wenn Sie sind zu faul, zu verwenden
select
oderpoll
. Stellen Sie sicher, korrekt proxy eine Verbindung halbwegs geschlossenen. (Der browser kann Herunterfahren senden, wenn Sie beendet Ihre Anfrage-es hört immer noch für die Antwort.)Soll der browser nicht versuchen, re-use die Verbindung. Wenn HTTP/1.0, muss es die spezifische Erlaubnis, das zu tun, was es nicht bekommen. Wenn HTTP/1.1, die der server akzeptieren soll, seine
Connection: close
Anfrage und Antworten mit einerConnection: close
eigener Kopf.Beachten Sie, dass HTTPS ist eigentlich einfacher. Sie müssen analysieren
CONNECT
Anfragen, ob Sie benötigen, um Unterstützung zu. Aber dann nehmen Sie einfach Verbindung auf die andere Seite, Bericht von Erfolg oder Misserfolg, und gehen Sie in bidirektionaler proxy-Modus.Müssen Sie analysieren die Anforderung an die URL, die der Kunde will. Diese URL enthält die information, die Sie brauchen: den Namen des Servers zu verbinden. Der client eine Verbindung zu Ihrem proxy, aber eigentlich will
http://example.com
. Sie haben, um eine Verbindung zuexample.com
. Danach können Sie eine völlig transparente TCP-proxy. Behandeln Sie die bidirektionale Daten einwandfrei übertragen werden, sowie TCP-halb-nah. Weiterleiten der Anforderung, dass Sie abgefangen und analysiert.Ihnen Recht, dass es verschiedene Arten von Proxys, denn Proxys sind nicht immer transparent. Ein proxy kann eine zusätzliche Authentifizierung und Verschlüsselung. Oder es können filter der HTML-Datei: zum Beispiel entfernen Sie oder verkleinern Sie Bilder für schnelleres surfen auf Netzwerken mit geringer Bandbreite. Oder es kann caching auf ein gesamtes LAN, damit die Leute nicht download der gleichen Datei mehrmals.
Das erste, was Sie tun sollten, ist zu schreiben, völlig generischer proxy für TCP: eine port-Weiterleitung. Dies ist ein Programm, das konfiguriert ist mit IP-und port-Nummer zu verbinden. Es wartet auf eine client-Verbindung, eine Verbindung zu den konfigurierten IP und Ziel-port, und übergibt dann die Daten zwischen diesem und dem Kunden.
Wenn Sie nicht schreiben können, werden Sie Schwierigkeiten haben, machen Sie einen HTTP-proxy, das ist ähnlich, aber bekommt seine Konfiguration von client-request (komplizierter).