본문으로 건너뛰기

HTTP 헤더, 파라미터, 예외 처리

HTTP 헤더, 파라미터, 예외 처리

웹 서버와 API로 상호작용할 때는 헤더(Header), 파라미터(Parameter) 등으로 요청을 구체화하고, 예외 처리를 통해 오류를 처리하는 것이 중요합니다.


HTTP 헤더(Header)

HTTP 헤더는 HTTP 요청과 응답 메시지의 일부로, 클라이언트와 서버 간에 전송되는 추가 정보를 포함합니다.

이 헤더는 메시지의 본문(body)과는 별도로 전송되며, 메시지의 속성, 본문의 내용, 클라이언트와 서버의 세부 설정 등에 대한 데이터를 담고 있습니다.

크게 요청(Request) 헤더응답(Response) 헤더로 나뉘며, 각각 요청과 응답에 대한 추가 정보를 포함합니다.


사용법: headers 매개변수로 HTTP 요청에 헤더를 추가합니다.

HTTP 요청에 헤더 추가
import requests

# 헤더 정의
headers = {'User-Agent': 'My User Agent 1.0'}

# GET 요청에 헤더 추가
response = requests.get('https://api.github.com', headers=headers)

HTTP 파라미터(Parameter)

HTML 파라미터는 클라이언트(웹 브라우저)가 서버로 정보를 보낼 때, URL에 이름과 값의 쌍으로 구성된 정보(예: 검색 쿼리, 페이지 번호)를 추가하여 HTTP 요청을 구체화합니다.

이러한 파라미터는 URL의 끝에 ?를 붙이고, 이름=값의 형태로 추가합니다. 여러 개의 파라미터를 추가할 때는 &로 구분합니다.

# 파라미터 이름 'query'에 값 'codefriends'를 추가
# 파라미터 이름 'sort'에 값 'ascending'을 추가
https://example.com/search?query=codefriends&sort=ascending

사용법: params 매개변수를 사용하여 GET 요청에 파라미터를 추가합니다.

파라미터 추가 예제
import requests

# query=python&page=2 파라미터 추가
parameters = {'query': 'python', 'page': 2}
response = requests.get('https://api.github.com/search', params=parameters)

예외 처리 방법

서버가 반환한 에러 응답(4xx, 5xx 상태 코드)을 적절하게 처리하지 않으면, 프로그램이 중단되거나 오류가 발생할 수 있습니다.

참고로 4xx 상태 코드는 클라이언트 오류를, 5xx 상태 코드는 서버 오류를 나타냅니다.

requests 라이브러리는 response.raise_for_status() 메소드로 예외를 처리합니다.

raise_for_status() 메소드는 응답 상태 코드가 400 이상인 경우, HTTPError 예외를 발생시킵니다.

HTTP 오류 예외 처리 예제
try:
response = requests.get('https://api.github.com')
response.raise_for_status()
except requests.exceptions.HTTPError as err:
print(f'HTTP 오류 발생: {err}')

타임아웃(timeout) 처리

요청이 지정된 시간 내에 완료되지 않을 경우에는 타임아웃 예외를 발생시켜 무한히 대기하는 상황을 방지하는 것이 좋습니다.

타임아웃은 요청에 timeout 매개변수를 추가하여 요청의 최대 대기 시간을 설정합니다.

최대 대기 시간을 넘으면 requests.exceptions.Timeout 예외가 발생합니다.

타임아웃 처리 예제
try:
# 최대 10초 대기
response = requests.get('https://api.github.com', timeout=10)
except requests.exceptions.Timeout as err:
print(f'요청 시간 초과: {err}')

실습

화면 오른쪽 코드 실행 버튼을 누르고, 크롤링 결과를 확인하거나 코드를 수정해 보세요!