- Published on
12단계: 외부 API 및 HTTP 요청
12-1. requests 라이브러리 설치
pip install requests
12-2. GET 요청
import requests
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
print(response.status_code)
print(response.json())
12-3. POST 요청
data = {"title": "foo", "body": "bar", "userId": 1}
response = requests.post("https://jsonplaceholder.typicode.com/posts", json=data)
print(response.json())
12-4. 쿼리 파라미터
params = {"userId": 1}
response = requests.get("https://jsonplaceholder.typicode.com/posts", params=params)
12-5. 헤더 설정
headers = {"Authorization": "Bearer YOUR_TOKEN"}
response = requests.get("https://api.example.com/data", headers=headers)
12-6. 응답 객체 구조
res.status_code # HTTP 상태 코드
res.text # 텍스트 형식
res.json() # JSON 파싱
res.headers # 응답 헤더
12-7. 예외 처리
try:
r = requests.get("https://example.com", timeout=3)
r.raise_for_status()
except requests.exceptions.RequestException as e:
print("요청 실패:", e)
12-8. 실습 예제
def get_user(user_id):
res = requests.get(f"https://jsonplaceholder.typicode.com/users/{user_id}")
if res.status_code == 200:
return res.json()
return None
요약
- requests는 Python에서 가장 널리 쓰이는 HTTP 클라이언트
- GET/POST 요청, JSON 처리, 헤더 설정, 예외 처리까지 직관적
- API 통신 시 상태 코드, timeout, 인증 헤더 등을 신경 써야 함
심화학습
Q1. GET과 POST는 어떤 상황에서 각각 사용해야 할까요?
A1. GET은 데이터 조회, POST는 데이터 생성/변경 시 사용됩니다. GET은 캐시 가능하며, POST는 보안 상 민감 데이터를 전송할 수 있습니다.
Q2. .json()과 .text의 차이는 무엇인가요?
A2. .text
는 응답 내용을 문자열로, .json()
은 JSON 형식으로 파싱하여 딕셔너리로 반환합니다.
Q3. 인증 방식 중 Bearer Token 외에 어떤 방식이 있나요?
A3. Basic 인증, API 키, OAuth 등이 있으며, 요청 헤더나 파라미터로 토큰을 전달하는 방식이 많습니다.