2015-11-26 8 views
2

Я использую HTTPie для POST a запрос на мультипорт/форму данных (передача опции -f). Он содержит поле файла (с использованием опции @). Соответствующая часть многочастного запроса имеет псевдо-заголовок Content-Disposition, но не имеет псевдо-заголовка Content-Type.Content-Type для одного файла в multipart/form-data с HTTPie

Каким образом можно добавить такой Content-Type для определенного файла?

Для полноты, вот что я посылаю сейчас (как показано -p B):

--xyz 
Content-Disposition: form-data; name="file"; filename="file.txt" 

Hello, world! 
This is the content of the file. 

--xyz 

, но вот то, что мне нужно отправить:

--xyz 
Content-Disposition: form-data; name="file"; filename="file.txt" 
Content-Type: text/plain 

Hello, world! 
This is the content of the file. 

--xyz 

Или положить его другой путь, как вариант эквивалента CURL: -F "file=file.txt;type=text/plain".

ответ

2

Это невозможно с httpie. Существует issue for it, с некоторыми запросами на растяжение, чтобы исправить это, но пока не были объединены.

+0

Вот чего я боялся :-(Спасибо за ответ и ссылку! –

+1

По состоянию на пять минут назад мастер-бранч поддерживает обнаружение типа контента;) $ pip install --upgrade https://github.com/jkbrzt/httpie/tarball/master –

+0

@jkbrzt выглядит, как будто он по-прежнему не позволяет установить заголовок Content-Type для других частей многостраничного запроса, как позволяет curl, например: 'curl -form ' param = Test; type = text/plain "--form" [email protected]; type = application/json ". Я отправляю запрос на приложение REST, основанное на Spring, и проверяет заголовки Content-Type каждого параметра multipart request. Если хотя бы один отсутствует, он выдает исключение. – jFrenetic

1

Это работает для меня:

http -f POST :8080/submit-file [email protected] [email protected] [email protected] 

Эта документация помогла мне: https://httpie.org/doc#file-upload-forms

[email protected] делает httpie отправить его с типом text/plain контента.

+0

Извините, по какой-то причине, я вижу только ваш ответ. Спасибо. Но дело не в том, чтобы иметь «text/plain», а в том, чтобы установить тип содержимого. В вашем примере я бы хотел убедиться, что это «application/json», а не «text/plain». –

+0

Я испугался из последнего предложения вопроса. Curl эквивалент: -F "file = file.txt; type = text/plain". Теперь я слишком неспособен, чтобы вернуться к этому. –