[파이썬] requests 커스텀 트랜스포트 어댑터 사용

requests logo

In this blog post, we’ll explore how to use a custom transport adapter with the popular requests library in Python. The requests library provides a convenient way to send HTTP requests and handle responses. With the help of a custom transport adapter, we can extend the functionality of requests and customize the underlying transport layer.

What is a Transport Adapter?

A transport adapter in requests is responsible for handling the low-level communication between the client and the server. By default, requests uses the HTTPAdapter to handle HTTP requests. However, you can create custom transport adapters to handle other protocols or apply additional functionality.

Creating a Custom Transport Adapter

To create a custom transport adapter, we need to subclass the HTTPAdapter and override its methods. Here’s an example of a simple transport adapter that adds a custom header to all requests:

import requests
from requests.adapters import HTTPAdapter

class CustomTransportAdapter(HTTPAdapter):
    def __init__(self, custom_header):
        self.custom_header = custom_header
        super().__init__()

    def send(self, request, **kwargs):
        request.headers['X-Custom-Header'] = self.custom_header
        return super().send(request, **kwargs)

In this example, we create a class CustomTransportAdapter that inherits from HTTPAdapter. We override the send method, which is called for every request made through requests. Inside the send method, we add a custom header to the request before passing it to the parent HTTPAdapter.

Using the Custom Transport Adapter

Once we have our custom transport adapter, we can easily integrate it with requests. Here’s an example of how to use our CustomTransportAdapter:

import requests

custom_header = 'My Custom Header Value'

session = requests.Session()
adapter = CustomTransportAdapter(custom_header)
session.mount('http://', adapter)
session.mount('https://', adapter)

response = session.get('https://api.example.com')

print(response.text)

In this example, we create a requests session and initialize an instance of our CustomTransportAdapter with the desired custom header value. We then use the mount method of the session object to associate our adapter with both http and https schemes. Finally, we make a GET request using the session, and the custom header will be automatically added to the request.

Conclusion

By leveraging the power of transport adapters in requests, we can extend its functionality and customize the behavior of the underlying transport layer. Whether it’s adding custom headers, handling different protocols, or implementing complex logic, custom transport adapters provide a flexible way to tailor requests to our specific needs.

Remember to explore the official requests documentation for more information on transport adapters and their capabilities. Happy coding!


References: