> Es muss das HTTP/1.1 verwendet werden, da der Server sonst ein Access Denied rausrückt
Ja, dann haben die Entwickler anscheinend Server und CLient exakt aufeinander abgestimmt: Wenn der Request vom Client nicht exakt übereinstimmt dann ist das anfordernde Programm kein Spiel.
Dann nimmste halt HTTP/1.1, da kann man nichts machen.
> bei den anderen versuchen bekomm ich immer ein Length Required zurück
Meine künftige Facharbeit wird sich mit um das HTTP-Protokoll drehen, ich kenne mich schon jetzt bereits mit vielem aus.
Aber mir ist derzeit keine Möglichkeit bekannt, anzugeben, wie viel Daten man erhalten möchte; das heißt doch.
Mit "Range". Ohne diesem Schlüsselwort gäbe es keine Downloadmanager.
Mit Range kann man bestimmen, welche Daten einer Datei man haben möchte, es funktioniert genauso wie
FileSeek():
Code: Alles auswählen
GET /bla.htm HTTP/1.1
Host: www.and51.de
Range: 0-51, 91-100, 194-
Connection: Close
Hier werden von der Datei 'bla.htm' die ersten 52 Byte angefordert (Zählung beginnt bei 0), dann noch die Bytes 92-101 und schließlich alle Bytes ab dem 195 Byte bis zum Ende der Datei.
Ich bin mir gerade nicht sicher, ob das Schlüsselwort nun "Range" oder "Byte" heißt, denn:
Man kann mit "HEAD" oder "OPTIONS" anstatt "GET" oder "POST" schon abfragen, welche Dinge ein Client mit der Datei anstellen kann.
Ich glaube OPTIONS gibt mehr Infos. Sendest du einen OPTIONS-Request, sagt dir der Server beispielsweise, ob man die
Datei teilweise herunterladen darf.
Das sieht dann so aus:
Code: Alles auswählen
OPTIONS /bla.htm HTTP/1.1
Host: www.and51.de (Host ist Pflicht in HTTP/1.1)
Nein, ich habe hier kein CONNECTION vergessen. beim Weglassen wird der Standardwert benutzt. Der Standardwert wäre in HTTP/1.0 "CLOSE", in HTTP/1.1 ist er "KEEP-ALIVE".
Eine Antwort könnte so aussehen:
Code: Alles auswählen
HTTP/1.1 200 OK
Allowed: GET, POST, HEAD, OPTIONS
Accept-Range: Byte
E-Tag: asdfasdf-and51-qwertz
ACCEPT-RANGE bedeutet, dass es erlaubt ist, diese Datei teilweise mit RANGE bzw. BYTE (ich weiß gerade das korrekte Schlüsselwort von beiden nicht) herunterzuladen. Läd man eine Datei teilweise herunter, ist der Statuscode nicht "200 OK", sondern "206 Partial Content".
Soviel dazu.
> hab ich zumindest im Moment per URLDownloadToFile_ das ganze getestet, und eigenartigerweise klappts dort sofort....
Dann biege doch mal
URLDownloadToFile_() um, das mach ich auch immer. Schnapp dir das Network-Server Beispiel aus der Hilfe, ändere den Port auf 80 und versuche mit einem 2. Code mal folgende Datei zu laden: "
http://localhost/bla.htm"
Dann wird der Request, den der Befehl an deinen eigenen Server schickt, debuggt.
Nun kannst du diesen Request abschreiben und selbst benutzen.
> der Server ist bei Requests extrem empfindlich
Wie ich schon ganz oben schrieb, vermute ich, dass der Grund ist, dass nur Requests von eigenen Produkten akzeptiert werden sollen.
> Was meinst du mit Standard? Das es vorzugsweise benutzt wird?
Mit "Standard" meinte ich nur, dass "Chunked Encoding" vom Server ohne Vorwarnung/Hinweis eingesetzt werden kann. Kann... muss aber nicht.
Wie gesagt, diese Technik gibt es eigentlich erst seit HTTP/1.1, daher habe ich empfohlen, HTTP/1.0 zu benutzen.
Ich mache das aus diesem Grund auch so bei meinen Projekten. Noch ist HTTP/1.0 nicht zu alt/altmodisch/überholt/outdated/depreciated/suchdirwasaus.
> Im Endeffekt ist es aber doch nur wichtig, wenn der Server, welchen er
kontaktieren will, das verfahren nutzt.
Ich kann auch einen eigenen Webserver schreiben (was ich mal vorhatte und immer noch vorhabe), welcher das HTTP/1.1 Protokoll unterstützt. Aber weißt du dann, ob meiner es auch einsetzen wird?
Das kannst du als Außenstehender nicht wissen, bis du es getestet hast. Ebenso kann Bisonte das nicht wissen.
> Er möchte ja kein Browser schreiben, der alle möglichkeiten abdeckt
Das ist richtig. Es ist aber schon wichtig zu prüfen, ob grobe Fehler auftreten. Für projekte wie seines halte ich es für wichtig, zumindest zu prüfen, ob der Statuscode <>200 ist, denn in diesem Fal ist was schief gelaufen. Von
URLDownloadToFile_() halte ich im Übrigen selber nicht viel, aus mindestens 2 Gründen:
1. IIRC erscheint die angegebene URL im Brwoserverlauf oder in sonstigen Windows-Histories.
2. Dieser Befehl funktioniert nur auf wenigen Rechnern und mit bestimmten Servern.
Warum weiß ich auch nicht, aber ich kann z. B. google.de abfragen, meinen eigenen Webspace damit jedoch nicht.
> und nicht jeder Server akzeptiert noch HTTP1.0
Sollte er aber, weil HTTP/1.0 noch nicht so überholt ist, wie HTTP/1.1.
Meiner Meinung nach akzeptieren noch genügend Server HTTP/1.0, aber dieser Punkt, ist IMGO einer, über den man sich streiten kann.
> GET ist das Befehlswort
Befehlswort? Wie sagt man? Richtig, "Danke"!
Richtiger wäre ein Ausdruck wie "Methode" in Anspielung auf das METHOD-Attribut beim HTML-Tag FORM.
Alternativ könnte man es aber auch sowas wie "Optionswort" oder "Anforderungsart" nennen.
Unter einem "Befehlswort" stelle ich mir eher sowas wie "GIVEME" vor...
Herrlich, PMV, das hat mir einen schönen Lacher beschert!
