[파이썬] requests HTTP 세션 활용

HTTP 세션은 웹 애플리케이션과 클라이언트 간의 상태를 유지하기 위해 사용됩니다. Requests는 Python에서 HTTP 요청을 보내기 위해 가장 많이 사용되는 라이브러리 중 하나입니다. 이 블로그 포스트에서는 Requests 라이브러리를 사용하여 HTTP 세션을 활용하는 방법에 대해 알아보겠습니다.

세션 생성하기

Requests 라이브러리를 사용하여 새로운 세션을 만들 수 있습니다. 세션 객체는 모든 요청에 대해 동일한 세션을 유지하여 상태를 유지하고, 쿠키를 관리하고, 기타 설정을 적용할 수 있습니다. 아래는 세션을 생성하는 예제 코드입니다.

import requests

session = requests.Session()

GET 요청 보내기

Requests를 사용하여 GET 요청을 보내는 경우, 세션 객체의 get 메소드를 호출하여 요청을 보낼 수 있습니다. 아래는 GET 요청을 보내고 응답을 얻는 예제 코드입니다.

response = session.get('https://api.example.com/data')

print(response.status_code)  # 응답 상태 코드 출력
print(response.json())       # JSON 응답을 딕셔너리로 변환하여 출력

POST 요청 보내기

POST 요청을 보내는 경우, 세션 객체의 post 메소드를 사용하여 데이터를 전송할 수 있습니다. 아래는 POST 요청을 보내고 응답을 얻는 예제 코드입니다.

payload = {'username': 'example_user', 'password': 'example_password'}
response = session.post('https://api.example.com/login', data=payload)

print(response.status_code)  # 응답 상태 코드 출력
print(response.text)         # 응답 텍스트 출력

쿠키 관리하기

세션을 사용하면 자동으로 쿠키를 관리할 수 있습니다. 요청을 보낼 때 세션 객체가 쿠키를 추적하고, 응답을 받을 때 새로운 쿠키를 저장합니다. 아래는 세션을 사용하여 쿠키를 관리하는 예제 코드입니다.

# 로그인 요청
payload = {'username': 'example_user', 'password': 'example_password'}
response = session.post('https://api.example.com/login', data=payload)

# 인증된 요청
response = session.get('https://api.example.com/protected_data')

print(response.status_code)  # 응답 상태 코드 출력
print(response.text)         # 응답 텍스트 출력

세션 설정 변경하기

세션을 사용하여 요청을 보낼 때, 세션 객체의 속성을 변경하여 세션 설정을 조정할 수 있습니다. 몇 가지 유용한 설정에는 타임아웃, User-Agent, Proxy 설정 등이 있습니다. 아래는 세션 설정을 변경하는 예제 코드입니다.

session.headers.update({'User-Agent': 'Mozilla/5.0'})
session.proxies = {'http': 'http://user:password@proxy.example.com',
                   'https': 'https://user:password@proxy.example.com'}
session.timeout = 10  # 초 단위로 타임아웃 설정

response = session.get('https://api.example.com/data')

print(response.status_code)  # 응답 상태 코드 출력
print(response.text)         # 응답 텍스트 출력

Requests 라이브러리의 세션을 활용하면 HTTP 요청 시 세션 관리, 쿠키 관리, 세션 설정 변경 등의 작업을 더 쉽게 수행할 수 있습니다. 이를 통해 웹 애플리케이션과의 통신을 효율적으로 처리할 수 있습니다. 추가 정보와 기능에 대한 자세한 내용은 Requests 라이브러리의 공식 문서를 참조하시기 바랍니다.