Working with APIs in Python: Making HTTP Requests

Working with APIs in Python: Making HTTP Requests

What is the requests Library?

The requests library is a simple and elegant HTTP library for Python that allows you to send HTTP requests and handle responses with ease. It abstracts away much of the complexity involved in making HTTP calls, making it a favorite among developers.

Installation: You can install the requests library using pip:

pip install requests        

Making GET Requests

The most common HTTP request is the GET request, which is used to retrieve data from a specified resource.

Example:

import requests

# Sending a GET request to a public API
response = requests.get('https://jsonplaceholder.typicode.com/posts')

# Checking the status code and printing the response
if response.status_code == 200:
    print("Response Data:", response.json())
else:
    print("Error:", response.status_code)        

Making POST Requests

POST requests are used to send data to a server, typically for creating new resources.

Example:

import requests

# Data to be sent in the POST request
data = {
    'title': 'foo',
    'body': 'bar',
    'userId': 1
}

# Sending a POST request
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=data)

# Checking the status code and printing the response
if response.status_code == 201:
    print("Created Resource:", response.json())
else:
    print("Error:", response.status_code)        

Handling Query Parameters

You can add query parameters to your GET requests to filter or specify data.

Example:

import requests

# Sending a GET request with query parameters
params = {'userId': 1}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)

# Checking the status code and printing the response
if response.status_code == 200:
    print("Filtered Posts:", response.json())
else:
    print("Error:", response.status_code)        

Sending Headers

Sometimes, you may need to send additional headers, such as authentication tokens or content types.

Example:

import requests

# Custom headers
headers = {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
}

# Sending a GET request with headers
response = requests.get('https://api.example.com/data', headers=headers)

if response.status_code == 200:
    print("Response Data:", response.json())
else:
    print("Error:", response.status_code)        

Handling Response Data

The response from an API can be in various formats, typically JSON. You can use the .json() method to parse the response data.

Example:

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')

if response.status_code == 200:
    data = response.json()
    print("Post Title:", data['title'])
    print("Post Body:", data['body'])        

Error Handling

It’s essential to handle potential errors when making HTTP requests, such as network issues or non-2xx responses.

Example:

try:
    response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
    response.raise_for_status()  # Raise an error for bad responses
    data = response.json()
    print("Post Title:", data['title'])
except requests.exceptions.HTTPError as err:
    print("HTTP error occurred:", err)
except Exception as e:
    print("An error occurred:", e)        

Using Session Objects

For making multiple requests to the same host, you can use a Session object. This helps manage cookies and maintain the connection.

Example:

import requests

with requests.Session() as session:
    session.headers.update({'Authorization': 'Bearer YOUR_ACCESS_TOKEN'})
    
    response = session.get('https://api.example.com/data')
    print("Response Data:", response.json())        

Conclusion

Working with APIs in Python using the requests library is straightforward and efficient. By mastering HTTP requests, you can interact with a wide range of web services, gather data, and automate tasks.

As you advance, consider exploring more complex topics such as handling authentication (OAuth), dealing with rate limits, and implementing retries for failed requests. Happy coding!

To view or add a comment, sign in

More articles by Prashant Patel

Explore content categories