HttpGetData
obj -> HttpGetData(handle1) : int
Daten des HTTP-Objekts lesen
Details
- obj: Deskriptor des HTTP -Objekts
- handle1: Deskriptor des Ziel-Objekts
- Resultat:
intFehlerwert - Siehe: Verwandte Befehle , HTTP ,
HttpClose (), Beispiel
Mit diesem Befehl werden die Daten des HTTP-Bodys eingelesen. Soll der Inhalt des HTTP-Bodys gesetzt werden, erfolgt das mit der Anweisung HttpClose (). In (obj) wird der Deskriptor des HTTP -Objekts übergeben. Das Objekt muss vom Typ _HttpRecvRequest oder _HttpRecvResponse sein. In (handle1) wird das Objekt angegeben, in das die Daten eingelesen werden sollen. Dafür können drei verschiedene Objekttypen verwendet werden:
- Datei Der in (handle1) übergeben Deskriptor muss vom Typ
_HdlFilesein. Die Daten werden direkt in die angegebene Datei geschrieben. - Memory-Objekt Der in (handle1) übergeben Deskriptor muss vom Typ
_HdlMemsein. Die Daten werden in das angegebene Memory -Objekt geschrieben. - Cte-Liste Der in (handle1) übergeben Deskriptor muss vom Typ
_HdlCteListsein. In diesem Fall enthält der HTTP-Body Parameter, die in die angegebene Cte-Liste eingelesen werden.
Die Cte-Liste enthält nur dann Werte, wenn die Daten URL-kodiert ( x-www-form-urlencoded ) übermittelt werden. Ansonsten ist das Ergebnis _ErrData .
Neben den Objekttypen müssen noch beim Einlesen von Daten drei Fälle unterschieden werden:
- Im einfachsten Fall hat der HTTP-Header einen
Content-Length-Eintrag, der die Größe des HTTP-Bodys enthält. Dadurch ist die Datenmenge bereits vor dem Aufruf der Anweisung bekannt. - Im zweiten Fall hat der HTTP-Header einen
Transfer-Encoding: chunked-Eintrag, der die Übertragung der Daten in mehreren Blöcken anzeigt. Es werden dann soviele Blöcke gelesen, wie die Gegenstelle liefert. In einigen Fällen wird zwischen den Daten und der nächsten Blocklänge kein Zeilenumbruch gesendet. Dies wird ignoriert und der nächste Block gelesen. - Im dritten Fall werden solange Daten vom Socket gelesen, bis ein Timeout eintritt. Hierbei sollte der Timeout des Sockets vor dem Lesen der Daten auf einen niedrigen Wert (0,25 bis 3 Sekunden) gesetzt werden, da
HttpGetData()auf jeden Fall bis zum Timeout wartet.
Als Rückgabewert wird ein Fehlerwert zurückgegeben. Bei _ErrOk ist kein Fehler aufgetreten. Im Fehlerfall können Fehlerkonstanten aus den Bereichen der externen Dateien, Socketfehler oder Fehler bei der Verarbeitung von Memory -Objekten zurückgegeben werden.
Mögliche Laufzeitfehler:
_ErrHdlInvalid: Der in (obj) oder in (handle1) übergebene Deskriptor ist ungültig_ErrStringOverflow: Das in (handle1) angegebene Memory -Objekt ist zu klein für die Datenmenge.