[파이썬] requests 인증 요청 처리하기

Python을 사용하여 웹 서비스에 인증된 요청을 보내기 위해서는 requests 라이브러리를 사용할 수 있습니다. requests는 간편하고 직관적인 API를 제공하여 HTTP 요청을 처리하는 데 사용됩니다. 이번 블로그 포스트에서는 requests를 사용하여 인증된 요청을 처리하는 방법에 대해 알아보겠습니다.

Basic 인증 처리하기

가장 간단한 형태의 인증은 Basic 인증입니다. Basic 인증은 요청 헤더에 인증 정보를 포함시켜서 인증을 진행하는 방식입니다. requests를 사용하여 Basic 인증을 처리하려면 다음과 같이 요청에 포함할 헤더를 설정해주면 됩니다.

import requests

# 인증 정보 설정
username = "my_username"
password = "my_password"
url = "https://example.com/api/"

# 인증 정보를 포함한 요청 보내기
response = requests.get(url, auth=(username, password))

# 응답 처리
if response.status_code == 200:
    # 성공적인 응답 처리
    print("인증 성공!")
else:
    # 인증 실패 혹은 다른 오류 처리
    print("인증 실패!")

위의 예제에서 requests.get() 함수를 사용하여 GET 요청을 보내고, auth 매개변수를 이용하여 Basic 인증 정보를 설정합니다. 인증이 성공하면 응답의 상태 코드가 200이 되고, 성공적인 응답 처리를 할 수 있습니다. 만약 인증이 실패하거나 다른 오류가 발생하면, 상태 코드를 확인하여 오류 처리를 할 수 있습니다.

Digest 인증 처리하기

Digest 인증은 Basic 인증과 마찬가지로 인증 정보를 요청 헤더에 포함시켜 인증을 처리합니다. 다만, Basic 인증과 달리 Digest 인증은 요청 및 응답에서 보안 강화를 위해 랜덤한 값을 사용합니다.

requests를 사용하여 Digest 인증을 처리하려면 requests_digest 패키지를 설치해야 합니다. 이 패키지는 requests의 유지보수를 향상시켜 Digest 인증을 처리할 수 있는 기능을 제공합니다. 패키지를 설치하고 나면 다음과 같이 Digest 인증 요청을 보낼 수 있습니다.

import requests
from requests_digest import HTTPDigestAuth

# 인증 정보 설정
username = "my_username"
password = "my_password"
url = "https://example.com/api/"

# 인증 정보를 포함한 Digest 인증 요청 보내기
response = requests.get(url, auth=HTTPDigestAuth(username, password))

# 응답 처리
if response.status_code == 200:
    # 성공적인 응답 처리
    print("인증 성공!")
else:
    # 인증 실패 혹은 다른 오류 처리
    print("인증 실패!")

위의 예제에서 requests_digest 모듈에서 HTTPDigestAuth 클래스를 가져와 requests.get() 함수에 인증 객체로 전달합니다. Digest 인증 처리는 이와 같이 간단하게 완료됩니다.

OAuth 인증 처리하기

OAuth 인증은 다른 사용자들에게 액세스 권한을 부여하기 위해 인증 및 권한 부여 프로세스를 지원합니다. requests를 사용하여 OAuth 인증을 처리하려면 보통 OAuth 라이브러리를 사용합니다. 각각의 OAuth 서비스는 자체적인 인증 방식을 제공하므로 해당 서비스의 문서를 참고하여 인증 방식을 구현해야 합니다. 일반적으로는 OAuth 서비스에서 발급한 client_idclient_secret를 사용하여 액세스 토큰을 얻어와 인증 요청에 사용합니다.

import requests
from requests_oauthlib import OAuth2Session

# OAuth 인증 정보 설정
client_id = "your_client_id"
client_secret = "your_client_secret"
authorize_url = "https://example.com/oauth2/authorize"
token_url = "https://example.com/oauth2/token"
redirect_uri = "https://your_app.com/callback"

# OAuth2세션 생성
oauth2_session = OAuth2Session(client_id, redirect_uri=redirect_uri)

# 인증 코드 얻기
authorization_url, state = oauth2_session.authorization_url(authorize_url)

# 사용자 인증 후 콜백 받기
token = oauth2_session.fetch_token(token_url, client_secret=client_secret)

# 액세스 토큰 설정
access_token = token["access_token"]

# API 요청 보내기
url = "https://example.com/api/v1/resource"
headers = {"Authorization": "Bearer " + access_token}
response = requests.get(url, headers=headers)

# 응답 처리
if response.status_code == 200:
    # 성공적인 응답 처리
    print("인증 성공!")
else:
    # 인증 실패 혹은 다른 오류 처리
    print("인증 실패!")

위의 예제는 OAuth2 인증 방식을 사용하는 경우입니다. requests_oauthlib 라이브러리에서 OAuth2Session 클래스를 사용하여 OAuth2의 세션 객체를 생성합니다. authorization_url로 사용자를 인증 페이지로 이동시킨 후, fetch_token 메서드를 사용하여 token_url에서 액세스 토큰을 얻어옵니다. 인증이 성공하면 액세스 토큰을 Bearer 스타일의 Authorization 헤더에 포함하여 요청을 보내면 됩니다.

결론

requests는 Python에서 HTTP 요청을 처리하는 강력하고 인기있는 라이브러리입니다. 이 라이브러리를 사용하여 인증된 요청을 처리하는 방법에 대해 알아보았습니다. Basic 인증, Digest 인증, OAuth 인증에 대해 간단한 예제 코드를 제시했으니 웹 서비스의 인증 방식에 맞게 코드를 적용하여 사용해보세요. 필요한 인증 정보 설정과 요청 처리를 적절히 구현하면, 인증된 요청을 보내는 데 어렵지 않게 성공할 수 있을 것입니다.