httpx

httpx는 파이썬(Python) 3을 위한 HTTP 클라이언트 라이브러리다. 동기식(Synchronous) 및 비동기식(Asynchronous) 네트워크 요청을 모두 단일 패키지 내에서 지원하며, HTTP/1.1과 HTTP/2 프로토콜을 다룰 수 있다.

이 라이브러리는 파이썬 생태계에서 널리 사용되는 requests 라이브러리의 API 구조를 의도적으로 모방하여 설계되었으나, requests가 지원하지 않는 비동기 처리 및 최신 웹 표준을 지원하기 위해 개발되었다.

주요 특징

  1. 표준 호환성: requests 라이브러리와 높은 API 호환성을 유지한다.
  2. 비동기 지원: async/await 구문을 사용하는 asynciotrio 환경에서 비동기 HTTP 요청 처리가 가능하다.
  3. HTTP/2 지원: 클라이언트 인스턴스 생성 시 선택적으로 HTTP/2를 활성화할 수 있다.
  4. 엄격한 타임아웃: 무한 대기 상태(Hanging)를 방지하기 위해, 모든 네트워크 연산에 기본 타임아웃이 설정되어 있다.
  5. 타입 어노테이션 달성: 정적 타입 검사기(예: mypy)와 함께 사용할 수 있도록 코드베이스 전체에 타입 힌트가 적용되어 있다.

파이썬 환경에서 사용되는 주요 HTTP 클라이언트 라이브러리들의 비교는 다음 표와 같다.

기능httpxrequestsaiohttp
동기식(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)

Entities