How to Make Requests in Python Follow Redirects
If you're a Python developer who works with requests, you might have encountered situations where you need to follow redirects while making HTTP requests. In Python, you can easily make requests follow redirects by specifying a value for the allow_redirects parameter.
Method 1: Using the allow_redirects Parameter in requests.get()
The simplest way to make requests follow redirects is by passing True for the allow_redirects parameter in the requests.get() method:
import requests
response = requests.get('https://example.com', allow_redirects=True)
In this example, the HTTP GET request to https://example.com will follow any redirects returned by the server. By default, allow_redirects is set to True, so you don't need to explicitly pass it unless you want to disable redirects.
Method 2: Using the max_redirects Parameter in Session()
If you're making multiple requests and want to control the maximum number of redirects that can be followed across all requests, you can use the max_redirects parameter in a requests.Session() object:
import requests
session = requests.Session()
session.max_redirects = 5
response = session.get('https://example.com')
In this example, we create a requests.Session() object and set its max_redirects attribute to 5. This means that any requests made through this session will follow up to 5 redirects before raising a requests.exceptions.TooManyRedirects exception.
If you don't set the max_redirects attribute, the session will follow redirects indefinitely.
Method 3: Using the hooks Parameter to Handle Redirects
If you need more control over how redirects are handled, you can use the hooks parameter in requests.Session() or requests.get(). This allows you to register a callback function that gets called every time a redirect happens:
import requests
def handle_redirects(response, **kwargs):
if response.is_redirect:
print(f'Redirected to: {response.headers["Location"]}')
session = requests.Session()
session.hooks['response'].append(handle_redirects)
response = session.get('https://example.com')
In this example, we define a callback function called handle_redirects() that gets called every time a redirect happens. The function checks if the response is a redirect (i.e., has a 3xx status code) and prints the redirect URL to the console.
We then create a requests.Session() object and register the callback function with the 'response' event using the hooks dictionary. Finally, we make a GET request to https://example.com. Every time a redirect happens, the handle_redirects() function will be called and print the redirect URL to the console.
Conclusion
In this post, we've explored three different ways to make requests follow redirects in Python using the allow_redirects parameter, the max_redirects attribute, and the hooks parameter. Depending on your use case, you can choose the method that works best for you.