it-swarm.com.de

Linux-Kommandozeilen-Tool zum Hochladen von Dateien über HTTP als Multipart- / Formulardaten?

Ich kann sehen, dass wget die Option --post-file hat, aber die Manpage sagt "Wget unterstützt derzeit keine mehrteiligen/Formulardaten zum Übertragen von POST Daten; nur application/x-www-form-urlencoded Es sollte nur eines von '--post-data' und '--post-file' angegeben werden. "

Gibt es eine ähnliche Möglichkeit zum Hochladen von Dateien in mehrteiligen/Formulardaten?

23
kdt

Verwenden Sie locken:

curl -F "[email protected];filename=nameinpost" url.com
29
Tobu

Dies ist nur mit wget möglich. Zumindest mit Version 1.13.4 und vielleicht anderen. Mit der Option --post-file können Sie eine zu sendende Datei angeben, sofern die Postdatendatei ordnungsgemäß erstellt wurde.

Ich habe dies auch mit Binärdateien getestet und es funktioniert wie erwartet. Sie müssen die Datei NICHT mit base64 codieren, aber Sie müssen sicherstellen, dass Ihre Datei keine Begrenzung enthält.

Der minimale Befehl, der erforderlich ist, um diese Arbeit auszuführen, wäre:

wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform

und die Postdata-Datei müsste etwa enthalten:

--FILEUPLOAD
Content-Disposition: form-data; name="comment"

I love uploading files!

--FILEUPLOAD
Content-Disposition: form-data; name="uploadFile"; filename="myfile.bin"; 
Content-Type: application/octet-stream
Media Type: application/octet-stream

Give me some automated file upload action!

--FILEUPLOAD--

Eine Reihe von Details sind hier wichtig:

  1. Zeilen in der Post-Datendatei werden mit\r\n abgeschlossen. Die einzige Ausnahme bilden Daten im Dateikontext.
  2. Jedes BOUNDARY-Attribut in den Postdaten muss mit dem BOUNDARY-Wert im Aufruf von wget übereinstimmen. (FILEUPLOAD im Beispiel)
  3. Allen Grenzen werden zwei Bindestriche "-" vorangestellt und mit\r\n abgeschlossen
  4. Die letzte Grenze wird mit zwei zusätzlichen Bindestrichen "-" versehen und mit\r\n abgeschlossen
  5. Jedes Datenelement, jeder Dateiinhalt oder jeder Parameterwert ist von einer leeren Zeile "\ r\n" umgeben.

Ich dachte, dies könnte jemandem helfen, da einige kontrollierte Umgebungen wget, aber nicht wellig sind.

16
tudor