23

Я вижу, что в wget есть опция --post-file, но на странице руководства сказано: "Wget в настоящее время не поддерживает multipart/form-data для передачи данных POST; только application/x-www-form-urlencoded. Только один из '--post-data' и '--post-file' должен быть указан. "

Есть ли аналогичный способ загрузки файлов в multipart/form-data?

2 ответа2

29

Используйте curl:

curl -F "file=@localfile;filename=nameinpost" url.com
15

Это можно сделать только с помощью wget. По крайней мере, с версией 1.13.4 и, возможно, другие. Опция --post-file позволяет вам указать файл для отправки, если файл постданных построен правильно.

Я также проверил это с бинарными файлами, и он работает как ожидалось. Вам НЕ нужно кодировать файл в base64, но вы должны убедиться, что ваш файл не содержит границы.

Минимальная команда, необходимая для выполнения этой работы, будет:

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

и файл postdata должен содержать что-то вроде:

--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--

Здесь важен ряд деталей:

  1. Строки в файле данных постов заканчиваются на \r \n. Единственным исключением являются данные внутри контекста файла.
  2. Каждый атрибут BOUNDARY в postdata должен соответствовать значению BOUNDARY в вызове wget. (FILEUPLOAD в примере)
  3. Все границы начинаются с двух дефисов "-" и заканчиваются на \r \n
  4. К последней границе добавляется два лишних дефиса "-" и заканчивается \r \n
  5. Каждый фрагмент данных, содержимое файла или значение параметра заключено в пустую строку "\r \n"

Я подумал, что это может кому-то помочь, поскольку в некоторых контролируемых средах есть wget, но нет скручивания.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .