Use the python Requests library to post Multipart-Encoded file

In this segment I’m going to show you how simple it is to post a Multipart-Encoded file to a RESTful api using the python Requests library using python 3.5.2.  So let’s get started. First you will need to install the python Requests library, to do that simply type this command into your terminal:

pip install requests

Once you have done that we can now get to the good stuff. Let’s take a look a this script then break it down line by line:

1
2
3
4
5
6
7
8
9
10
11
#!venv/bin/python
import requests
 
file = open('test.txt', 'rb')
url = 'https://example.com/api/files/'
headers = {'token': 'c203x302s30s03x0322x0320'}
payload = {'client_id': 1}
files = {'file': file}
r = requests.post(url, files=files, data=payload, headers=headers)
json_data = r.json()
print(json_data)

What’s going on here? Let’s start with the obvious:

1.) We are importing the requests library so we can make HTTP requests using get, post, put, delete etc…

2.) On line 4 we are opening a file(test.txt) in binary mode, which is recommended by the Requests docs because opening it in text mode may cause an error because Requests attempts to provide a Content-Length header for you, which is in bytes.

3.) On line 5 we are simply providing the url we plan on posting the file to.

4.) On line 6, for security reasons my api requires an authentication token for verification to be placed in the headers. You may or may not need this.

5.) On line 7, the payload is the data that I will be sending along with our file, and for me it’s a client id.

6.) And on line 8 we are assigning the file to a files dictionary. The Requests post method requires the files keyword argument to be an iterable list. If you attempt to post a the file itself without being in list context then you will get a ValueError.

7.) On line 9 we call requests.post() method and supply the arguments required to complete the request,  and store the response object in the “r” variable.

8.) And on line 10 we can call the json() method on the response object so our data will a JSON format.

9.) And lastly were merely are printing out the JSON response data.

And that’s really all there is to it. If you have any questions please feel free to comment below, thanks.

Further reading: Python Requests Library, JSON Intro

Leave a Reply

Your email address will not be published. Required fields are marked *