Autor: Matthias Griesbach (---.customers.d1-online.com)
Datum: 23.06.14 18:52
Hallo Mike,
das boundary ist nur bei Content-Type: multipart/form-data notwendig, um die Multiparts, also verschiede Inhalte, voneinander trennen zu können. Z.B. 3 Bilder in einem Rutsch hochladen.
Jepp - der Content-Type im Header entscheidet, wie der Body zu gestallten ist.
Bei application/x-www-form-urlencoded ist es einfach nur ein URI mit den ganzen Daten.
Bei multipart/form-data ist es dann der Body innert eines boundary
Mit der Size habe ich auch viel probiert. Die Bytes vom Header dazu addiert etc. Sobald die Werte aber nicht gleich waren, blieb mir das Programm hängen.
Soweit ich das richtig verstanden habe, ist die Angabe TotalLength das, was dann dem Header als Content-Length hinzugefügt wird.
Also Content-Length => Body
Gerade nochmal das Multiform mit folgendem Body getestet:
Body$="--7deb41813115a2\n"
Body$=Body$+"Content-Disposition: form-data; name=\quserfile\q; filename=\qkylt-export.csv\q\n"
Body$=Body$+"\n--7deb41813115a2\n"
Body$=Body$+ReadCSV("C:\\Kylt PCR\\kylt-export.csv")+"\n"
Body$=Body$+"--7deb41813115a2--\n"
Im Header die beiden -- beim boundary weggelassen
Print HttpAddHeader("Content-Type: multipart/form-data; Charset: utf-8; boundary=7deb41813115a2")
Klappt 
Gleiche SendRequest Proc wie im letzen Beispiel
Proc HttpSend
Parameters Text$
Declare Size&, Return$
Size&=Len(Text$)
Return$="Send Request "+format$("0",size&)+" Byte"
bResults& = PWinHttpSendRequest( hRequest&,~WINHTTP_NO_ADDITIONAL_HEADERS,0, Addr(Text$), Size&, Size&, 0) '~WINHTTP_NO_REQUEST_DATA addr(widestring#)
CaseNot bResults& :Return$="Send: "+str$(~GetLastError())+WinError$(%WinError)
Return Return$
EndProc
Bittte mal testen.
Beste Grüße
Matthias Griesbach
Edit: Natürlich erstmal nur mit Text/CSV Dateien.
XProfan X2, Windows 7
Nachricht bearbeitet (23.06.14 18:58)
|
|