Gibts ein Projekt wie Privoxy auf Qt-Basis?

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
Teetrinker
Beiträge: 37
Registriert: 21. Mai 2008 21:07

Gibts ein Projekt wie Privoxy auf Qt-Basis?

Beitrag von Teetrinker »

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?
androphinx
Beiträge: 170
Registriert: 26. Januar 2009 09:19
Wohnort: 127.0.0.2

Beitrag von androphinx »

HTTP ist als Protokoll eigentlich standartisiert, deswegen sollte es keine Unterschiede geben... Was genau ist denn dein Problem?

Mfg androphinx
Teetrinker
Beiträge: 37
Registriert: 21. Mai 2008 21:07

Beitrag von Teetrinker »

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.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

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.

hth..
Teetrinker
Beiträge: 37
Registriert: 21. Mai 2008 21:07

Beitrag von Teetrinker »

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.
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.

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.
androphinx
Beiträge: 170
Registriert: 26. Januar 2009 09:19
Wohnort: 127.0.0.2

Beitrag von androphinx »

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
Teetrinker
Beiträge: 37
Registriert: 21. Mai 2008 21:07

Beitrag von Teetrinker »

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.
Von dem QTcpServer bekomme ich ja einzelne Aufträge, normale GET-Requests sind auch nicht das Problem, die funktionieren ja wie gewollt.
Und schau mal, was ich bei Wikipedia (!) gefunden habe: http://en.wikipedia.org/wiki/Hypertext_ ... st_message
Danke für den Hinweis, aber das bezieht sich hauptsächlich auf GET-Requests und die funktionieren bei meinem Programm ja.
Da sollte es wohl dann doch keine Probleme mehr geben, oder?
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.
androphinx
Beiträge: 170
Registriert: 26. Januar 2009 09:19
Wohnort: 127.0.0.2

Beitrag von androphinx »

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.
Weil Get-Anweisungen so klein sind, dass sie in ein Paket passen.
Teetrinker hat geschrieben: Danke für den Hinweis, aber das bezieht sich hauptsächlich auf GET-Requests und die funktionieren bei meinem Programm ja.
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: 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.
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.

Mfg androphinx
Antworten