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 benötigt wird, um diese Arbeit zu machen, wäre:
wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform
und die Postdata-Datei müsste etwas enthalten wie:
--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:
- Zeilen in der Post-Datendatei werden mit \ r \ n abgeschlossen. Die einzige Ausnahme bilden Daten im Dateikontext.
- Jedes BOUNDARY-Attribut in den Postdaten muss mit dem BOUNDARY-Wert im Aufruf von wget übereinstimmen. (FILEUPLOAD im Beispiel)
- Allen Grenzen werden zwei Bindestriche "-" vorangestellt und mit \ r \ n abgeschlossen
- Die letzte Grenze wird mit zwei zusätzlichen Bindestrichen "-" versehen und mit \ r \ n abgeschlossen
- 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.
cat pic.jpg >> postdata
, in Notepad ++ geladen und die letzte Grenze + '-' + EOL angehängt. W3C-Referenz