[파이썬] requests 요청 훅 활용하기

In this blog post, we will explore the powerful features of the requests library in Python and how to take advantage of request hooks.

Introduction to Requests

requests is a widely-used Python library for making HTTP requests. It simplifies the process of sending HTTP/1.1 requests and handling the response data.

To use requests, you will need to install it first. Run the following command in your terminal:

pip install requests

Request Hooks

Request hooks are a set of callback functions that allow you to modify the request and response lifecycle. They provide flexibility and control over the behavior of your requests.

pre_request

The pre_request hook is called right before a request is sent. This is useful for modifying the request headers or body before it is sent out.

import requests

def pre_request(request):
    # Modify headers
    request.headers['Authorization'] = 'Bearer <your_token>'
    
    # Print request URL
    print(f'Request URL: {request.url}')
    
    return request

response = requests.get('https://api.example.com/user', hooks={'pre_request': pre_request})
print(response.json())

In the above example, we add an Authorization header with a token to the request. We also print the request URL before it is sent.

post_request

The post_request hook is called after a request is sent and before the response is returned. This hook allows you to manipulate the response data or raise an exception based on the response.

import requests

def post_request(request, response):
    # Print response status code
    print(f'Response Status Code: {response.status_code}')
    
    # Raise an exception if status code is not 200
    if response.status_code != 200:
        raise Exception('Request failed')
    
    return response

response = requests.get('https://api.example.com/user', hooks={'post_request': post_request})
print(response.json())

In the above example, we print the response status code and raise an exception if it is not equal to 200. This allows us to handle erroneous responses gracefully.

response

The response hook is called after a request is sent and the response is returned. This hook is useful for performing additional processing on the response data.

import requests

def response(request, response, *args, **kwargs):
    # Print response headers
    print(f'Response Headers: {response.headers}')
    
    # Print response content
    print(f'Response Content: {response.content}')
    
    return response

response = requests.get('https://api.example.com/user', hooks={'response': response})
print(response.json())

In the above example, we print the response headers and content. This allows us to inspect the data returned by the server.

Conclusion

Request hooks in the requests library provide a powerful mechanism for modifying the request and response lifecycle. They allow you to customize and control the behavior of your HTTP requests. By using these hooks effectively, you can build more resilient and error-handling applications.