[파이썬] requests 조건부 요청 설정하기

Requests는 Python에서 많이 사용되는 HTTP 요청 라이브러리입니다. 이 라이브러리를 사용하면 간단하고 효과적으로 HTTP 요청을 보낼 수 있습니다. 이번 포스트에서는 Requests 라이브러리를 사용하여 조건부 요청(Conditional Requests)을 설정하는 방법에 대해 알아보겠습니다.

조건부 요청이란?

조건부 요청은 서버에 특정 조건을 전달하여, 리소스가 변경되었을 때만 실제 데이터를 다운로드하는 방식입니다. 이를 통해 불필요한 트래픽을 줄이고, 네트워크 대역폭을 절약할 수 있습니다. 이러한 조건부 요청은 HTTP 헤더를 사용하여 설정할 수 있습니다.

Requests 라이브러리는 조건부 요청을 보내기 위해 If-Modified-Since, If-None-Match, If-Unmodified-Since, If-Match와 같은 헤더를 사용합니다. 이 헤더들은 서버가 리소스에 대한 변경 상태(ETag, Last-Modified)와 비교하여 요청의 필요성을 판단하는 데 사용됩니다.

예제 코드

아래 예제 코드를 통해 Requests를 사용하여 조건부 요청을 설정하는 방법을 알아보겠습니다.

import requests

url = 'https://example.com/api/data'
headers = {
    'If-Modified-Since': 'Sun, 30 May 2022 12:00:00 GMT',
    'If-None-Match': 'W/"0123456789abcdef"'
}

response = requests.get(url, headers=headers)

if response.status_code == 304:
    print('Not Modified')
elif response.status_code == 200:
    print('Modified')
    data = response.json()
    # TODO: Handle the updated data
else:
    print('Error:', response.status_code)

위의 코드에서는 If-Modified-Since 헤더와 If-None-Match 헤더를 설정하여 조건부 요청을 보냅니다. 이는 서버에 최종 수정 시간과 ETag(리소스의 고유 식별자)를 전달하여, 리소스가 변경되었을 때만 데이터를 다운로드하도록 요청하는 것을 의미합니다.

만약 서버가 리소스를 변경하지 않았고, 이전과 동일한 상태라면, 서버는 304 Not Modified 상태 코드를 응답하여 응답 본문을 전송하지 않습니다. 이 경우 코드에서는 “Not Modified” 메시지를 출력합니다.

리소스가 변경되었다면, 서버는 200 OK 상태 코드와 함께 변경된 데이터를 응답 본문으로 전송합니다. 이 경우 코드에서는 “Modified” 메시지를 출력하고, 데이터를 처리할 수 있도록 작업을 수행할 수 있습니다.

요약

이번 포스트에서는 Python의 Requests 라이브러리를 사용하여 조건부 요청을 설정하는 방법에 대해 알아보았습니다. 조건부 요청을 사용하면 네트워크 대역폭을 절약하고, 데이터 전송 효율성을 높일 수 있습니다. Requests 라이브러리의 다양한 기능을 활용하여 웹 애플리케이션 개발 시 조건부 요청을 유연하게 활용해보세요.