httpx
httpx는 파이썬(Python) 3을 위한 HTTP 클라이언트 라이브러리다. 동기식(Synchronous) 및 비동기식(Asynchronous) 네트워크 요청을 모두 단일 패키지 내에서 지원하며, HTTP/1.1과 HTTP/2 프로토콜을 다룰 수 있다.
이 라이브러리는 파이썬 생태계에서 널리 사용되는 requests 라이브러리의 API 구조를 의도적으로 모방하여 설계되었으나, requests가 지원하지 않는 비동기 처리 및 최신 웹 표준을 지원하기 위해 개발되었다.
주요 특징
- 표준 호환성:
requests라이브러리와 높은 API 호환성을 유지한다. - 비동기 지원:
async/await구문을 사용하는asyncio및trio환경에서 비동기 HTTP 요청 처리가 가능하다. - HTTP/2 지원: 클라이언트 인스턴스 생성 시 선택적으로 HTTP/2를 활성화할 수 있다.
- 엄격한 타임아웃: 무한 대기 상태(Hanging)를 방지하기 위해, 모든 네트워크 연산에 기본 타임아웃이 설정되어 있다.
- 타입 어노테이션 달성: 정적 타입 검사기(예:
mypy)와 함께 사용할 수 있도록 코드베이스 전체에 타입 힌트가 적용되어 있다.
파이썬 환경에서 사용되는 주요 HTTP 클라이언트 라이브러리들의 비교는 다음 표와 같다.
| 기능 | httpx | requests | aiohttp |
|---|---|---|---|
| 동기식(Sync) API | 지원함 | 지원함 | 지원하지 않음 |
| 비동기식(Async) API | 지원함 | 지원하지 않음 | 지원함 |
| HTTP/2 프로토콜 | 지원함 (선택 활성화) | 지원하지 않음 | 지원하지 않음 |
| API 설계 패턴 | requests 인터페이스 호환 | 기준 모델 | 독자적인 인터페이스 |
| 타입 힌트 적용 | 내장 기반 완벽 지원 | 외부 패키지 요구 | 내장 기반 (일부 제약) |
사용 예시 (동기 및 비동기)
동기식 요청:
import httpx
response = httpx.get('https://www.example.com')
status = response.status_code비동기식 요청:
import httpx
import asyncio
async def fetch_data():
async with httpx.AsyncClient() as client:
response = await client.get('https://www.example.com')
return response.status_code
asyncio.run(fetch_data())출처(Sources)
- Encode OSS, “HTTPX: A next-generation HTTP client for Python”, https://www.python-httpx.org/
- Python Software Foundation, “httpx - PyPI”, https://pypi.org/project/httpx/