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 응답도 성공으로 처리됩니다.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.