2015-08-12 6 views
2

Я пытаюсь выполнить многостраничную загрузку формы с помощью «запросов» в python. Я могу загрузить файл, но он никогда не загружает дополнительные поля, которые обычно передаются через флаг -F с curl. Локон команда, которую я пытаюсь подражать:curl to requests conversion python -F flag

curl -v -u user:password -X POST -F 'properties={"filename":"maurizio.png"}' -F "[email protected]" 192.168.59.103:8080/testdb/mybucket.files 

Код запросов:

url = "http://192.168.59.103:8080/testdb/mybucket.files" 
content_type = "multipart/form-data" 

params = {"filename":"maurizio.png"} 
params["_id"] = "test_hash_1234" 

data = open('maurizio.png','rb').read() 

files = {'file': ('maurizio.png',data,content_type,params)}    
request = requests.post(url,files=files,auth=('user','password')) 

Этот файл загружается в restheart API для MongoDB. «_id» - это специальный идентификатор объекта, который база данных использует для ссылки на объект. Мне нужно указать это поле документа в дополнение к другим полям документа, таким как имя файла. Файл загружается в хранилище blob-файлов Mongo, называемое gridfs. Я могу загрузить данные и дополнительные поля документа с помощью curl, но вышеприведенный код «запросы» загружает только данные, а не дополнительные поля документа. Мне нужны эти дополнительные поля для запросов. Может ли кто-нибудь помочь мне преобразовать флаг -F во что-то, что эквивалентно модулю запросов python?

Спасибо!

ответ

0

Отъезд example in the manual:

files = {'file': ('report.xls', open('report.xls', 'rb'))} 
r = requests.post(url, files=files) 

Обратите внимание, что сначала вы должны передать файл, а не данные (не нужно read() содержимое файла, вам просто нужно передать файл объект)

0

Кстати, есть также Github repository, который показывает некоторые основные примеры доступа к RESTHeart с Python.

Целью было показать, как сделать простые звонки RESTful с использованием Python и requests library, пожалуйста, не стесняйтесь, чтобы ваши запросы на тягу добавляли больше случаев или просто смотрите на существующие тесты, если они могут вам помочь.