Sending files to an API is a common task in many Python applications. Fortunately, the requests library makes it easy to upload files to an API using HTTP. In this article, we will explore how to use requests to send files to an API.

First, let's start by installing the requests library using pip:

pip install requests

Once you have requests installed, you can start sending files to an API.

Sending Files with requests.post()

To send a file to an API using requests, you can use the post() method. Here's an example:

import requests

url = 'https://api.example.com/upload'
file = {'file': open('example.txt', 'rb')}

response = requests.post(url, files=file)
print(response.text)

In this example, we are sending a file called example.txt to the API endpoint at https://api.example.com/upload. We create a dictionary called file that maps the file parameter name expected by the API to a file object opened in binary read mode using the built-in open() function. We then pass this dictionary to the files parameter of the post() method.

The post() method returns a Response object that we can use to check the status of the request and get the response data. In this example, we simply print the response text to the console.

Sending Multiple Files

You can also send multiple files in a single request by adding more items to the file dictionary:

import requests

url = 'https://api.example.com/upload'
files = {
    'file1': open('example1.txt', 'rb'),
    'file2': open('example2.txt', 'rb')
}

response = requests.post(url, files=files)
print(response.text)

In this example, we are sending two files to the API endpoint at https://api.example.com/upload. We create a dictionary called files that maps the file parameter names expected by the API to file objects opened in binary read mode using the built-in open() function. We then pass this dictionary to the files parameter of the post() method.

Sending Additional Data

You can also send additional data along with the file(s) by adding key-value pairs to the data parameter of the post() method:

import requests

url = 'https://api.example.com/upload'
files = {'file': open('example.txt', 'rb')}
data = {'name': 'John Doe'}

response = requests.post(url, files=files, data=data)
print(response.text)

In this example, we are sending a file called example.txt and the additional data name=John Doe to the API endpoint at https://api.example.com/upload. We create a dictionary called data that maps the additional parameter names expected by the API to their values. We then pass this dictionary to the data parameter of the post() method.

Sending Files with Headers

Finally, you may need to send additional headers along with the request. To do this, you can add key-value pairs to the headers parameter of the post() method:

import requests

url = 'https://api.example.com/upload'
files = {'file': open('example.txt', 'rb')}
headers = {'Authorization': 'Bearer YOUR_API_KEY'}

response = requests.post(url, files=files, headers=headers)
print(response.text)

In this example, we are sending a file called example.txt to the API endpoint at https://api.example.com/upload along with an Authorization header containing our API key

Sending files to an API endpoint using requests is a straightforward process, as demonstrated in the examples above. Whether you're building a web application, a desktop application, or a mobile application, the requests library provides a simple and powerful interface for sending files to API endpoints.