[Python] requests 라이브러리__03
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()