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 등이 있으며, 요청 헤더나 파라미터로 토큰을 전달하는 방식이 많습니다.