[파이썬] requests 웹 서비스의 제한사항 처리하기

웹 서비스를 개발하다보면 다양한 제한사항을 처리해야 할 때가 있습니다. 예를 들어, 서버의 요청 제한 횟수, 인증토큰의 만료 시간, 요청에 대한 응답시간 등이 제한사항으로 작용할 수 있습니다. 이러한 제한사항을 효과적으로 처리하기 위해서는 requests 라이브러리를 활용할 수 있습니다.

요청 횟수 제한하기

API 서비스를 이용할 때, 제공되는 API 키로 요청 횟수에 제한이 있는 경우가 있습니다. 이 경우 제한된 횟수 내에서만 요청을 보내야 합니다. requests 라이브러리는 Session 객체를 제공하여 요청을 관리해주는 기능을 제공합니다. 이를 활용하여 요청 횟수를 제한할 수 있습니다.

import requests

session = requests.Session()
session.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'})

# API 요청 횟수 제한 변수
max_requests = 100
current_requests = 0

def send_api_request(url):
    global current_requests

    if current_requests >= max_requests:
        raise Exception("API 요청 횟수를 초과했습니다.")

    response = session.get(url)

    current_requests += 1

    return response

위의 예제는 요청을 보내기 전에 current_requests 변수를 확인하여 허용된 횟수를 초과하는 경우 예외를 발생시킵니다.

인증토큰의 만료 시간 확인하기

API 서비스를 사용할 때, 일부 서비스는 인증토큰(expiration token)을 사용하여 사용자를 인증하는 경우가 있습니다. 이 인증토큰은 일정 시간이 지난 후에 만료되므로, 만료 여부를 확인하여 새로운 토큰을 발급받아야 합니다. requests 라이브러리를 사용하면 만료 시간을 확인하여 자동으로 새로운 토큰을 발급할 수 있습니다.

import requests
from datetime import datetime, timedelta

token = 'your_token'
expiration_time = datetime.now() + timedelta(days=1)

def get_api_data(url):
    global token, expiration_time

    if datetime.now() > expiration_time:
        # 토큰 만료 시간이 지났으면 새로운 토큰 발급
        token = get_new_token()
        expiration_time = datetime.now() + timedelta(days=1)

    headers = {'Authorization': f'Bearer {token}'}
    response = requests.get(url, headers=headers)

    return response.json()

위의 예제는 expiration_time 변수를 이용하여 토큰의 만료 시간을 확인하고, 만료 시간이 지난 경우 get_new_token() 함수를 호출하여 새로운 토큰을 발급받습니다.

요청 응답시간 제한하기

API 요청을 보낼 때, 응답이 늦어지는 경우에는 해당 요청을 취소하거나 특정 시간 이상 걸릴 경우 예외를 발생시킬 수 있습니다. requests 라이브러리는 timeout 매개변수를 제공하여 응답시간을 제한할 수 있습니다.

import requests

def send_api_request(url):
    response = requests.get(url, timeout=5) # 5초 내에 응답이 없으면 예외 발생

    return response

위의 예제는 timeout=5를 설정하여 5초 내에 응답이 없으면 Timeout 예외가 발생합니다. 이를 통해 오랜 시간 응답을 기다리는 상황을 방지할 수 있습니다.

마무리

requests 라이브러리를 사용하여 웹 서비스의 제한사항을 효과적으로 처리할 수 있습니다. 위의 예제 코드를 활용하여 요청 횟수 제한, 인증토큰의 만료 시간 확인 및 요청 응답시간 제한 등을 처리할 수 있습니다. 이를 통해 웹 서비스의 안정성과 사용성을 향상시킬 수 있습니다.