Невозможно отправить запрос `multipart / form-data` с модулем запросов Python - PullRequest
0 голосов
/ 26 июня 2018

У меня есть сервер Java Spring, который требует Content-Type запросов, отправляемых на сервер, равным multipart/form-data.

Я могу правильно отправлять запросы на сервер с почтальоном:

enter image description here

enter image description here

Однако при попытке отправить запрос с модулем requests я получил ошибку The current request is not a multipart requestв Python3.

Мой код Python:

import requests

headers = {
  'Authorization': 'Bearer auth_token'
}

data = {
  'myKey': 'myValue'
}

response = requests.post('http://127.0.0.1:8080/apiUrl', data=data, headers=headers)
print(response.text)

Если я добавлю 'Content-Type': 'multipart/form-data' в заголовок запроса, сообщение об ошибке станет Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found.

Как я могу сделать тот же запрос, что и почтальон с Python?

1 Ответ

0 голосов
/ 26 июня 2018
Автор

requests считает, что эта ситуация не является питонической, поэтому requests не поддерживает это использование изначально.

Вам необходимо использовать requests_toolbelt, который является расширением, поддерживаемым членамизапрашивает команду разработчиков ядра, doc , пример:

import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder

m = MultipartEncoder(
    fields={'field0': 'value', 'field1': 'value',
            'field2': ('filename', open('file.py', 'rb'), 'text/plain')}
    )

r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})
...