Krautkanal.com

Veröffentlicht am 2015-04-12 12:00:08 in /prog/

/prog/ 6946: http chunked response und line-based text data

ultragex Avatar
ultragex:#6946

Guten Tag,
Ich versuche ein Programm zu schreiben, welches auf einem Server eine automatische Suchanfrage durchführt. Dazu sende ich eine Get-Request and den Server. Von diesem erhalte ich auch einen vollständigen Http-Header, jedoch ist der gesendete Datenstatz mir absolut unverständlich.
Dem Header kann man entnehmen, dass es sich um einen chunked Transfer-Encoding und um text/html Daten handelt.
Die empfangenen Bytes sind aber leider kein Text...
Nun habe ich mir auf Wikipedia angeschaut, wie genau, eine chunked Übertragung funktioniert:

4\r\n
Wiki\r\n
5\r\n
pedia\r\n
e\r\n
in\r\n\r\nchunks.\r\n
0\r\n
\r\n

Meine Überlegung war es nun jede Zeile einzeln einzulesen und ausgeben zu lassen, aber selbst dann wurde mir kein verständlicher Text ausgegeben.
Weiterhin habe ich mit WireShark mitgesnifft und konnte dort unter "HTTP chunked response"
ebenfalls nur wenig ersichtliche Bytes finden.
Jedoch folgte in Wireshark darauf "line-based text data: text/html"
Unter dieser Rubrik waren die gewünschten Daten zu finden.
Wie komme ich also in meinem C-Programm an diese Daten.
Ich hoffe ihr könnt mir helfen.
Mit freundlichen Grüßen J.Hill

yigitpinarbasi Avatar
yigitpinarbasi:#6947

http://curl.haxx.se/libcurl/

Und falls du's doch selbst programmieren willst (in C, wzf?):
http://tools.ietf.org/html/rfc7230#section-4.1

Nehmen wir mal an, du benutzt libc und sockets und fd ist dein Datei-Beschreiber für die Netzwerkverbindung.
Dann:
- mit fdopen nen Strom draus machen
- mit fgets() die Chunk-Größe auslesen (musst kurz gurgeln, wie sich das mit \n und \r\n verhält)
- danach mit fread() den Chunk selbst auslesen
- wiederholen

souperphly Avatar
souperphly:#6949

Mein Problem ist es nicht an die Chunkdaten zu kommen, sondern, dass diese Daten keinen html-Code enthalten. Eben dafür habe ich einen Querverweis auf Wireshark gemacht, welches mir ebenfalls die Chunkdaten präsentiert, aber ebenfalls einen html-Code Klartext. Diesen erhalte ich leider nicht...
Da der Server daraufhin keine Daten mehr sendet gehe ich davon aus, dass die gesendeten Bytes die gewünschten Daten codiert sind. Der http-Header gibt mir an, dass es sich um UTF-8 Code handeln soll. Dieser ist doch, so Wikipedia, bis zu den ersten 127 Zeichen mit dem ASCII Code deckungsgleich, weshalb das doch auch nicht die Lösung sein kann...
In Wireshark tauch der Begriff der line-based text data auf, mit dem ich garnichts anfangen kann...
Wisst ihr, wie ich ich an diese "line-based text data" komme?
Mit freundlichen Grüßen J.Hill

fluidbrush Avatar
fluidbrush:#6950

Ohne konkretes Beispiel ist deine Frage leider ziemlich wertlos.

doooon Avatar
doooon:#6951

Die Antwort ist alles in allem recht leicht...
Die Daten sind gzip codiert.

Neuste Fäden in diesem Brett: