PHpullh
학습 라이브러리/Python/HTTP 요청 (requests/httpx)

PYTHON · 파일/IO

HTTP 요청 (requests/httpx)

HTTP 클라이언트로 외부 API를 호출하고 응답을 처리합니다.

파일/IO중급requestshttpxHTTPAPI

핵심 설명

HTTP 클라이언트로 외부 API를 호출하고 응답을 처리합니다.

Python code

# requests 라이브러리 패턴 시뮬레이션
from urllib.request import urlopen, Request
from urllib.error import URLError
import json

# 기본 GET 요청
def http_get(url: str, headers: dict = None) -> dict:
    req = Request(url, headers=headers or {})
    try:
        with urlopen(req, timeout=10) as resp:
            return {
                "status": resp.status,
                "body": resp.read().decode("utf-8"),
                "headers": dict(resp.headers),
            }
    except URLError as e:
        return {"error": str(e)}

# requests 스타일 API 시뮬레이션
class Response:
    def __init__(self, status=200, data=None):
        self.status_code = status
        self._data = data or {}

    def json(self):
        return self._data

    def raise_for_status(self):
        if self.status_code >= 400:
            raise Exception(f"HTTP {self.status_code}")

# 실사용 패턴 (requests 설치 필요)
# import requests
# resp = requests.get("https://api.example.com/users",
#     params={"page": 1},
#     headers={"Authorization": "Bearer TOKEN"},
#     timeout=10,
# )
# resp.raise_for_status()
# users = resp.json()

# httpx (비동기 지원)
# import httpx
# async with httpx.AsyncClient() as client:
#     resp = await client.get("https://api.example.com")

resp = Response(200, {"users": [{"name": "Alice"}]})
print(f"상태: {resp.status_code}")
print(f"데이터: {resp.json()}")

학습 팁

항상 timeout을 설정하세요. 기본값이 없어 서버가 응답하지 않으면 영원히 대기합니다.

주의할 점

raise_for_status()를 호출하지 않으면 4xx/5xx 응답도 성공으로 처리됩니다.

자주 묻는 질문

HTTP 요청 (requests/httpx)란 무엇인가요?

HTTP 클라이언트로 외부 API를 호출하고 응답을 처리합니다.

HTTP 요청 (requests/httpx) 학습 시 주의할 점은 무엇인가요?

raise_for_status() 를 호출하지 않으면 4xx/5xx 응답도 성공으로 처리됩니다.