HTTP Fehler?
Übersicht

![]() |
KnorxThieusBetreff: HTTP Fehler? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich wollte mich mal mit HTTP - was für mich noch Neuland ist - auseinandersetzen, aber bei mir (BlitzPlus) funktioniert nicht mal der Beispielcode: BlitzBasic: [AUSKLAPPEN] Print "Verbinde..." Ich bekomme immer nur Code: [AUSKLAPPEN] Verbinde...
Verbunden! Sende Anfrage... Anfrage gesendet! Warte auf Antwort... HTTP/1.1 301 Moved Permanently Date: Sat, 17 May 2014 15:12:37 GMT Server: Apache/2.2.22 (Debian) Location: http://www.blitzforum.de/ Vary: Accept-Encoding Content-Length: 233 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="http://www.blitzforum.de/">here</a>.</p> </body></html> Erfolgreich! Ich bin doch schon bei https://www.blitzforum.de/ ! Was mache ich falsch? Mit freundlichen Grüßen, KnorxThieus |
||
Version: BlitzPlus / Blitz+ |
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
du darfst erstens nicht die ganze Webadresse bei GET mitsenden, nur die Unterseite. 2. wird im Header die Hostangabe verlangt. Wenn du das korrigierst, sollte es gehen: BlitzBasic: [AUSKLAPPEN] Print "Verbinde..." Vllt sollte da mal die Hilfe ausgebessert werden. Ich sende den Vorschlag gleich mal ab... lg, Count-Doku |
||
![]() |
KnorxThieus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ach, vielen Dank! Da war die Hilfe wohl nicht so ganz aktuell...
Und wie war das jetzt noch mal mit Connection? Bei /HTTP/1.1 bleibt sie keep-alive, wie schließt man sie dann? |
||
Version: BlitzPlus / Blitz+ |
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auch das kannst du im Header mitsenden,
also halt entweder Connection: keep-alive oder Connection: close dann musst du aber darauf achten, wie der Server antwortet, er muss den gewünschten Verbindungsmodus nicht akzeptieren und kann dir einen anderen vorschreiben. Wenn du keep-alive nutzt, denke ich es reicht zum schließen einfach den TCP Stream mit CloseTCPStream ![]() Ansonsten einfach mal die HTTP Definition auf Wikipedia lesen ( http://de.wikipedia.org/wiki/H...r_Protocol ) Ist nicht so lang und das steht eigentlich das meiste drinne. Auch wie du auf die einzelnen Statuscodes reagieren musst/kannst/solltest ![]() lg, Count-Dokz |
||
![]() |
KnorxThieus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab ich schon angelesen, auf Wiki, aber was mir da fehlt, ist ein kompletter Übertragungsvorgang...
Danke! Connection: close Edit: Ich hoffe, jemand liest das noch... Ist es auch irgendwie möglich, gleich am Anfang die Länge der Seite auszulesen? Brauchte ich für den Fortschritt... |
||
Version: BlitzPlus / Blitz+ |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Server sendet bei der Antwort im Header "Content-Length" die Länge der Daten in Bytes.
Wenn du den Inhalt noch gar nicht abrufen willst, sondern nur die Kopfdaten (wie die Länge) auslesen willst, kannst du statt GET auch HEAD benutzen. Dann sendet der Server den Antwort-Header ohne den Inhalt. Das WriteLine tcp, Chr(13) + Chr(10) ist genau genommen nicht ganz richtig. WriteLine schreibt ja bereits ein Zeilenende. Somit werden zwei Zeilen geschrieben. Um nur eine Zeile zu schreiben reicht ein WriteLine tcp, "" ![]() |
||
![]() |
KnorxThieus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank! Ja, das Content-Lenght habe ich auch schon gelesen, aber nach Zählen der danach gesendeten Zeichen blieb noch eine Differenz übrig, woran liegt das?
Danke auch für die beiden anderen Tipps! (-: |
||
Version: BlitzPlus / Blitz+ |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ich das richtig im Kopf habe, ist die Angabe hexadezimal, müsste man also noch umrechnen.
EDIT: Gerade nachgelesen, ich liege falsch, sorry ![]() mfG, Christoph |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die zusätzlichen Bytes kommen vom Transfer-Encoding: chunked. Der Inhalt kommt nicht immer in reiner Textform daher. Der Server kennt verschiedene Codierungsverfahren wie chunked, base64 und andere.
Ich habe das vorhin kurz getestet und erhielt bei http://www.blitzforum.de die Antwort als chunked codiert zurück. Wird chunked verwendet, dann sendet der Server kein Content-Length mit der Anzahl Bytes (dezimal). Stattdessen sendet er die Daten codiert. In dieser chunked-Codierung enthalten sind mehrere Chunks (Blöcke). Für jeden Datenblock steht am Anfang eine Zeile mit der Länge des Blocks, diesmal aber in Hexadezimal. Daher kriegt man beim Beispiel mit www.blitzforum.de zuerst mal die Länge 2eeb zurück, was 12011 Bytes entspricht. Danach sollte man exakt diese Anzahl an Bytes lesen und danach kommt ein neuer Block. Beim nächsten Block war bei mir dann eine Länge von 0 drin, was bedeutet dass nun kein Inhalt mehr folgt. Wie du siehst, ist es leider nicht ganz einfach, einen zuverlässigen HTTP-Client zu schreiben ![]() |
||
![]() |
KnorxThieus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die Antworten, hat leider etwas gedauert.
Was heißt das jetzt in der Praxis? Kann ich den Server anweisen, mir alles in einem bestimmten Codierungsverfahren zu schicken? |
||
Version: BlitzPlus / Blitz+ |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Einige Server unterstützen:
Zitat: Accept-Encoding: identity
Generell ist es aber am besten gar kein Accept-Encoding zu senden, was schonmal soviel bedeutet wie dass man kein gzip oder deflate haben möchte. Um auch das chunked zu verhindern, muss man offenbar zwingend HTTP/1.0 verwenden statt 1.1. Scheinbar gab es in 1.0 das Connection: keep-alive und somit auch das chunked noch nicht. Zitat: Das hat bei mir jedenfalls funktioniert. Ich konnte den ganzen Inhalt ohne irgendwelche zusätzlichen oder zu wenigen Bytes auslesen ![]() |
||
![]() |
KnorxThieus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, also ein allgemeines Verfahren gibt es nicht...? | ||
Version: BlitzPlus / Blitz+ |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist ein generelles Problem bei solchen sehr alten Standards. Die sind häufig nicht gerade wasserdicht designt worden. Dazu kommt, dass es hunderte verschiedene Implementierungen eines HTTP-Servers gibt, die alle alles ein klein wenig anders machen. Wenn du etwas willst, dass auf jedem Server funktionieren soll, dann musst du es auch so bauen, dass es mit allem klar kommt. | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
KnorxThieus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, dann muss ich die Zeitschätzung wohl aufgeben ![]() Trotzdem Danke! |
||
Version: BlitzPlus / Blitz+ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group