Getting Started with Requests

To begin using the requests library, you first need to install it. You can do this via pip:

pip install requests

Once installed, you can import it into your Python script:

import requests

Making GET Requests

The most common use case for the requests library is to make GET requests. This method retrieves data from a specified resource. Here’s a simple example:

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

Response Object

The response object contains several attributes that can help you understand the outcome of your request:

AttributeDescription
response.status_codeThe HTTP status code returned by the server.
response.textThe content of the response, in Unicode format.
response.json()Parses the response content as JSON.
response.headersThe headers returned by the server.

Example: Checking Status Code

You can check the status code to determine if the request was successful:

if response.status_code == 200:
    print("Success:", data)
else:
    print("Error:", response.status_code)

Making POST Requests

In addition to GET requests, you can also send data to a server using POST requests. Here’s how to do it:

payload = {'title': 'foo', 'body': 'bar', 'userId': 1}
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=payload)

print(response.json())

Handling JSON Data

When sending JSON data, it’s important to use the json parameter, which automatically sets the Content-Type header to application/json. This is a best practice when dealing with APIs that expect JSON input.

Working with Query Parameters

Sometimes, you may need to include query parameters in your GET requests. The params argument allows you to do this easily:

params = {'userId': 1}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)

print(response.json())

Handling Sessions

The requests library also supports sessions, which can persist certain parameters across requests. This is particularly useful for maintaining cookies or headers. Here’s how to create a session:

session = requests.Session()
session.headers.update({'Authorization': 'Bearer your_token_here'})

response = session.get('https://jsonplaceholder.typicode.com/posts')
print(response.json())

Closing the Session

It’s a best practice to close the session when you are done. You can do this using:

session.close()

Error Handling

Handling errors gracefully is crucial in any application. The requests library provides an easy way to handle exceptions that may arise during requests:

try:
    response = requests.get('https://jsonplaceholder.typicode.com/posts/1000')
    response.raise_for_status()  # Raises an HTTPError for bad responses
except requests.exceptions.HTTPError as err:
    print("HTTP error occurred:", err)
except Exception as err:
    print("An error occurred:", err)

In this example, raise_for_status() will raise an HTTPError for any response codes that indicate an error (4xx or 5xx).

Timeout Handling

To avoid hanging indefinitely on a request, you can set a timeout. This is a best practice, especially for production applications:

try:
    response = requests.get('https://jsonplaceholder.typicode.com/posts', timeout=5)
    print(response.json())
except requests.exceptions.Timeout:
    print("The request timed out")

Conclusion

The requests library is a versatile and powerful tool for making HTTP requests in Python. Its simplicity and ease of use make it a favorite among developers. By mastering its core functionalities—GET and POST requests, handling sessions, and managing errors—you can effectively interact with web APIs and build robust applications.

Learn more with useful resources: