개요
2025.04.13-[Python] requests Transport Adapters - 요청 재시도에서 Python requests 모듈을 사용할 때의 요청 재시도 방법을 소개했었다. 그리고 HTTPX도 비슷한 방식으로 재시도 기능을 제공하고 있다.
이번 글에서는 HTTPX Transports 방법을 활용해 요청을 재시동하는 방법을 소개한다.
Transports
HTTPX의 Client는 Requests의 Session과 유사하게 transport 인수를 허용한다. 즉, 연결 재시도 등과 같은 일부 고급 구성이 필요한 경우 전송 클래스를 객체화해 클라이언트 객체에 전달할 수 있다.
다만 Retry 객체를 정의해 재시도 정책을 정의했던 것과 달리 httpx.HTTPTransport는 retries 매개변수를 통해 재시도 횟수를 정의할 수 있다.
다만 여러 형태의 재시도 로직이 필요한 경우에는 별도의 도구를 사용할 필요가 있다고 한다.
연결 재시도 구현
구현 방식은 간단하다. HTTPTransport 객체를 정의하고, Client에 전달한 뒤 요청하면 된다.
import httpx
transport = httpx.HTTPTransport(retries=3)
with httpx.Client(transport=transport) as client:
r = client.get('https://reqres.in/api/register')
print(r)
재시도를 수행했는지에 대한 에러 등은 딱히 보이지 않는 것 같다.
mount
HTTPX는 클라이언트에 전송 객체를 직접 전달할 수 있을 뿐만 아니라 Requests 라이브러리와 비슷하게 마운트 하여 사용하는 방법도 제공하고 있다. mounts라는 매개변수로 도메인을 키로 하고 전송 객체를 값으로 하는 딕셔너리를 전달하면 된다.
아래 코드는 HTTP, HTTPS 요청에 위에서 정의한 HTTPTransport 객체를 사용하도록 마운트한 예시이다.
import httpx
transport = httpx.HTTPTransport(retries=3)
mounts = {
'http://': transport,
'https://': transport,
}
with httpx.Client(mounts=mounts) as client:
r = client.get('https://reqres.in/api/register')
print(r)
참고 문서
https://www.python-httpx.org/advanced/transports/