Hi,
ich versuche mich derzeitig son bisschen an einem Proxy, der die gesamte HTTP-Kommunikation des Browsers empfängt und diese dann weiterreicht. Also im Grunde nichts anderes als z.B. Privoxy, der die reinkommenden und rausgehenden Daten empfängt und auch verändern kann.
Bisher klappt das auch ganz gut, aber bei POST-Requests vom Browser aus komme ich nicht weiter, weil es da offenbar verschiedene Möglichkeiten gibt, wie der Browser diese Daten weiterreicht.
Deswegen, kennt jemand ein Projekt o.Ä., wo man sich mal anschauen könnte, wie es richtig gemacht wird?
Gibts ein Projekt wie Privoxy auf Qt-Basis?
-
- Beiträge: 37
- Registriert: 21. Mai 2008 21:07
-
- Beiträge: 170
- Registriert: 26. Januar 2009 09:19
- Wohnort: 127.0.0.2
-
- Beiträge: 37
- Registriert: 21. Mai 2008 21:07
Hi
Also ich benutze einen QTcpServer um auf Port 8081 zu lauschen. Kommt eine POST-Verbindung rein, dann sieht man das an den Daten, die der QTcpServer übergibt, z.B. "POST http://www.... HTTP/1.0"
Soweit so einfach, jetzt erstelle ich mit QHTTP (ich weiß ist veraltet aber im meinem alten Source wirds noch benutzt) einen POST-Request mit den Daten von dem QTcpServer und genau hier fängt mein Problem an.
Fall 1:
Content-Type: application/x-www-form-urlencoded alle Post-Daten befinden sich in den Daten, die sich vom QTcpServer bekommen habe (Content-Length: == dem angehängtem Zeugs vom QTcpServer)
Fall 2:
Content-Type: application/x-www-form-urlencoded aber es sind nicht alle Daten dabei, sprich die kommen erst später in einer oder mehreren Etappen über den QTcpServer.
Fall 3:
Upload von Dateien, dann kommen die Daten auf jeden Fall nach und nach rein über den QTcpServer
Also Fall 1 bereitet mir keine Probleme, aber Fall 2+3 kriege ich nicht gebacken, habe da schon stundenlang rumprobiert ohne Erfolg.
Also ich benutze einen QTcpServer um auf Port 8081 zu lauschen. Kommt eine POST-Verbindung rein, dann sieht man das an den Daten, die der QTcpServer übergibt, z.B. "POST http://www.... HTTP/1.0"
Soweit so einfach, jetzt erstelle ich mit QHTTP (ich weiß ist veraltet aber im meinem alten Source wirds noch benutzt) einen POST-Request mit den Daten von dem QTcpServer und genau hier fängt mein Problem an.
Fall 1:
Content-Type: application/x-www-form-urlencoded alle Post-Daten befinden sich in den Daten, die sich vom QTcpServer bekommen habe (Content-Length: == dem angehängtem Zeugs vom QTcpServer)
Fall 2:
Content-Type: application/x-www-form-urlencoded aber es sind nicht alle Daten dabei, sprich die kommen erst später in einer oder mehreren Etappen über den QTcpServer.
Fall 3:
Upload von Dateien, dann kommen die Daten auf jeden Fall nach und nach rein über den QTcpServer
Also Fall 1 bereitet mir keine Probleme, aber Fall 2+3 kriege ich nicht gebacken, habe da schon stundenlang rumprobiert ohne Erfolg.
-
- Beiträge: 37
- Registriert: 21. Mai 2008 21:07
Mir ist schon klar, dass die Daten stückchenweise kommen (können), das Problem ist nur da eine funktionierende "Brücke" zu basteln und das ist genau das, was ich nicht hinkriege und ich mir woanders abgucken wollte.solarix hat geschrieben:Wie sollen die Daten denn sonst kommen wenn nicht "nach und nach"?
TCP/IP ist ein "Stream", das bedeutet du musst als Empfänger selbst entscheiden, wann die Daten vollständig sind.
Alle meine Ansätze liefen nicht, glaube mittlerweile dass es eventuell besser wäre sich Asio von Boost näher anzuschauen, die scheinen da mehr bieten zu haben als Qt, zumindest was diese Thematik angeht.
-
- Beiträge: 170
- Registriert: 26. Januar 2009 09:19
- Wohnort: 127.0.0.2
Wenn ich dir einen guten Rat geben darf: Das hat nix mit den Bibliotheken zu tun. TCP-Pakete sind nun mal einfach dazu geschaffen, einzeln, eines nach dem anderen anzukommen.
Und schau mal, was ich bei Wikipedia (!) gefunden habe: http://en.wikipedia.org/wiki/Hypertext_ ... st_message
Da sollte es wohl dann doch keine Probleme mehr geben, oder?
Mfg androphinx
Und schau mal, was ich bei Wikipedia (!) gefunden habe: http://en.wikipedia.org/wiki/Hypertext_ ... st_message
Da sollte es wohl dann doch keine Probleme mehr geben, oder?
Mfg androphinx
-
- Beiträge: 37
- Registriert: 21. Mai 2008 21:07
Von dem QTcpServer bekomme ich ja einzelne Aufträge, normale GET-Requests sind auch nicht das Problem, die funktionieren ja wie gewollt.androphinx hat geschrieben:Wenn ich dir einen guten Rat geben darf: Das hat nix mit den Bibliotheken zu tun. TCP-Pakete sind nun mal einfach dazu geschaffen, einzeln, eines nach dem anderen anzukommen.
Danke für den Hinweis, aber das bezieht sich hauptsächlich auf GET-Requests und die funktionieren bei meinem Programm ja.Und schau mal, was ich bei Wikipedia (!) gefunden habe: http://en.wikipedia.org/wiki/Hypertext_ ... st_message
Die theoretische Lösung kenne ich, nur weiß ich nicht wo es genau hapert. Alles was ich bisher versucht habe, die etappenweisen Daten vom QTcpServer weiter zu verarbeiten und weiter ins Internet zu pumpen, haben alle nicht geklappt.Da sollte es wohl dann doch keine Probleme mehr geben, oder?
Deswegen die Frage, ob es vielleicht ein ähnlichen Programm gibt, wo man sich was abgucken kann. Aber so wie es aussieht gibts da leider keins.
-
- Beiträge: 170
- Registriert: 26. Januar 2009 09:19
- Wohnort: 127.0.0.2
Weil Get-Anweisungen so klein sind, dass sie in ein Paket passen.Teetrinker hat geschrieben: Von dem QTcpServer bekomme ich ja einzelne Aufträge, normale GET-Requests sind auch nicht das Problem, die funktionieren ja wie gewollt.
Die Erkenntnis, die aus diesem Absatz ziehen solltest, war, dass HTTP-Transmissionen grundsätzlich mit <CR><LF> enden. Das heißt du fügst deine Daten einfach solange zusammen, bis am Ende dieses "Zeichenfolge" kommt.Teetrinker hat geschrieben: Danke für den Hinweis, aber das bezieht sich hauptsächlich auf GET-Requests und die funktionieren bei meinem Programm ja.
Das Ding ist eigentlich, dass du POST-Abfragen immer fast direkt weiter ins Internet pumpen kannst, weil es da garantiert kein zwischengespeichertes Dokument gibt. Du solltest aber natürlich entsprechend den Header ändern, dass die Daten entsprechend richtig zurückkommen.Teetrinker hat geschrieben: Die theoretische Lösung kenne ich, nur weiß ich nicht wo es genau hapert. Alles was ich bisher versucht habe, die etappenweisen Daten vom QTcpServer weiter zu verarbeiten und weiter ins Internet zu pumpen, haben alle nicht geklappt.
Deswegen die Frage, ob es vielleicht ein ähnlichen Programm gibt, wo man sich was abgucken kann. Aber so wie es aussieht gibts da leider keins.
Mfg androphinx