Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to send `multipart/form-data` request with python requests module

I have Java spring server that requires the Content-Type of the requests being sent to the server to be multipart/form-data.

I can correctly send requests to the server with postman:

enter image description here

enter image description here

However, I got The current request is not a multipart request error when trying to send the request with requests module in python3.

My python code is:

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)

If I add 'Content-Type': 'multipart/form-data' to the header of the request, the error message then becomes Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found.

How can I make the same request as postman sends with python?

like image 340
Brian Avatar asked Dec 18 '25 23:12

Brian


1 Answers

requests's author thinks this situation is not pythonic, so requests doesn't support this usage natively.

You need to use requests_toolbelt which is an extension maintained by members of the requests core development team, doc, example:

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})
like image 118
Sraw Avatar answered Dec 20 '25 12:12

Sraw



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!