headers in requests in python

Headers in Requests in Python

Headers are important components of an HTTP request that contain additional information about the request such as the type of browser, cookies, and authentication tokens. Python's Requests library is a popular module used to send HTTP requests and provides an easy-to-use interface for adding headers to requests.

Sending Headers with Requests

The Requests library in Python provides a headers parameter that can be used to add headers to an HTTP request. The headers parameter takes a dictionary containing the headers to be added. The keys in the dictionary represent the header names, while the values represent the header values.


import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
    "Accept-Language": "en-US,en;q=0.5",
    "Authorization": "Token 1234567890abcdefg"
}

response = requests.get("https://example.com", headers=headers)

In the code snippet above, we first import the Requests library and create a dictionary containing the headers we want to add to the request. We then pass the headers dictionary to the headers parameter of the get() method to send the request with the specified headers.

Modifying Existing Headers

In some cases, we may want to modify the existing headers of a request. For example, we may want to change the value of the User-Agent header to make it look like we're using a different browser.


import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
    "Accept-Language": "en-US,en;q=0.5",
    "Authorization": "Token 1234567890abcdefg"
}

headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; rv:40.0) Gecko/20100101 Firefox/40.0"

response = requests.get("https://example.com", headers=headers)

In the code snippet above, we modify the value of the User-Agent header by accessing it through the headers dictionary and assigning a new value to it.

Alternative Ways to Add Headers

Aside from passing headers as a dictionary to the headers parameter, there are other ways to add headers to a request in Python.

1. Using the requests.Request class:


import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
    "Accept-Language": "en-US,en;q=0.5",
    "Authorization": "Token 1234567890abcdefg"
}

req = requests.Request("GET", "https://example.com", headers=headers)
prepared = req.prepare()
response = requests.send(prepared)

Here, we create a Request object and pass the headers dictionary to it. We then call the prepare() method on the Request object to create a PreparedRequest object, which we can then pass to the requests.send() method to send the request.

2. Using a session object:


import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
    "Accept-Language": "en-US,en;q=0.5",
    "Authorization": "Token 1234567890abcdefg"
}

session = requests.Session()
session.headers.update(headers)
response = session.get("https://example.com")

In this approach, we create a session object and call its headers.update() method to update the headers of the session. We can then use the session object to send requests with the updated headers.

Conclusion

Headers are an important part of HTTP requests and can be easily added and modified using Python's Requests library. By using headers, we can send additional information with our requests, such as authentication tokens and browser information.