기술 노트/programming language

[Python] requests 라이브러리__03

bigwhaleking 2024. 10. 2. 15:01

1. Authentication

'Authentication'은 저희가 누구인지 알려주는데 사용됩니다. 일반적으로 헤더나 서비스에서 정의한 사용자 지정 헤더를 통해 데이터를 통해 데이터를 전달하여 서버에 가격을 증명합니다.

지금까지 본 모든 'request'의 함수들은 자격 증명하기 위해서 'auth'라 불리는 파라미터를 사용합니다.

import requests

response = requesgs.get(
			"https://www.example.com",
			auth=("user", "passwd") )

 

 

위 처럼 자격 증명을 튜플로 넘겨 주게 된다면 'request'는 HTTP 기본 인증 스키마를 사용하여 자격 증명을 주게 됩니다.

HTTPBasicAuth를 사용하여 명시적인 자격 증명을 전달 할 수 있습니다.

import requests
from requests.auth import HTTPBasicAuth

requests.get(
	"https://www.example.com",
	auth=HTTPBasicAuth("user", "passwd") )

 

 

인증된 사용자에게 요청을 하고 싶을 때 개인 접근 토은을 생성해야 합니다 그리고 튜플로 두 번째 인자로 전달하면 됩니다.

import requests

token = "<YOUR_TOKEN_KEY>"

response = requests.get(
			"https://www.example.com",
			auth("", token) )

 

 

하지만 위 코드는 불필요한 문자열을 사용함으로 권장하는 방법은 아니라고 합니다.

from requests.auth import AuthBase

class TokenAuth(AuthBase):

	def __init__(self, tokem):
		self.token = token

	def __call__(self, requests):
		request.headers[“Authorization”]=f”Bearer {self.token}”
		return request

<custom_token.py>

 

 

사용자 지정 TokenAuth는 토큰을 받은 다음 해당 토큰을 Authorization 헤더에 포함하고 문자열 앞에 Bearer 추가합니다.

import requests

from custom_token import TokenAuth

token = “<YOUR_TOKEN_KEY>”

response = requests.get(
	https://www.example.com,
	auth=TokenAuth(token) )

 

 

2. SSL Certificate Verification

SSL 인증서 검증은 'requests'가 기본적으로 수행하는 작업입니다. 그러나 이 동작을 변경하고 싶을 때 'verify'를 사용합니다.

import requests

requests.get("https://www.example.com", verify=False)

 

 

3. Timeout

애플리케이션을 원활하게 하기 위해서 시간 초과 제어, 세션 및 재시도 제한과 같은 기능이 있습니다. 이러한 기능을 제어하기 위해서 'timeout'이라는 파라미터를 사용합니다.

'timeout'은 정수 또는 실수로 나타낼 수 있습니다.

import requests

requests.get("https://www.example.com", timeout=1)

 

 

튜플을 이용하여 연결 시간 초과, 읽기 시간 초과를 전달 할 수 있습니다.

import requests

try:
	response = requests.get("https://www.example.com", timeout=(3.05, 5))
except Timeout:
	print(“The request timed out”)
else:
	print(“The request did not time out”)

 

 

3. The Session Object

세션은 요청 간에 파라미터를 유지하는데 사용됩니다. 예를 들어, 여러 요청 간에 동일한 인증을 사용하려면 세션을 사용할 수 있습니다.

import requests
 from custom_token import TokenAuth
 
 TOKEN = "<YOUR_GITHUB_PA_TOKEN>"
 
 with requests.Session() as session:
     session.auth = TokenAuth(TOKEN)
 
     first_response = session.get("https://www.example.com/user")
    second_response = session.get("https://www.example.com/user")

print(first_response.headers)
print(second_response.json())

 

 

4. Max Retries

요청을 실패하면 애플리케이션에서 동일한 요청을 다시 시도하도록 할 수 있습니다. 하지만 'requests'에서는 추가적인 설정이 없다면 다시 시도하지 않습니다. 'requests'에서 이 기능을 수행하기 위해서는 사용자가 지정한 전송 어댑터를 구현애햐 합니다.

import requests
from requests.adapters import HTTPAdapter
from requests.exceptions import RetryError

adapter = HTTPAdapter(max_retries=2)

session = requests.Session()

session.mount("https://www.example.com", adapter)

try:
    response = session.get("https://www.example.com/")
except RetryError as err:
    print(f"Error: {err}")
finally:
    session.close()