■ Retry 클래스를 사용해 HTTP 요청 오류 발생시 재시도하는 방법을 보여준다.
※ Retry 클래스의 생성자에서 total 인자는 총 재시도 카운트로 connect 인자와 read 인자를 설정한 경우 두 값의 합을 지정하거나 합보다 큰 수를 지정하면 된다.
※ Retry 클래스의 생성자에서 backoff_factor 인자는 오류가 발생했을 때 다음 재시도를 언제할 지 정하는 값이다.
※ backoff_factor 인자에 의한 재시도 지연 시간 공식 : backoff_factor * (2 ^ (현재 재시도 카운트 – 1))초
▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
from requests.sessions import Session from requests.adapters import HTTPAdapter, Retry def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) print() def executeHTTPRequest(method, url, connectRetryCount = 3, readRetryCount = 5, backOffFactor = 1, retryStatusCodeTuple = (400, 403, 500, 503)): with Session() as session: retry = Retry( total = (connectRetryCount + readRetryCount), connect = connectRetryCount, read = readRetryCount, backoff_factor = backOffFactor, status_forcelist = retryStatusCodeTuple, ) httpAdapter = HTTPAdapter(max_retries = retry) session.mount("http://" , httpAdapter) session.mount("https://", httpAdapter) response = session.request(method = method, url = url) return response response = executeHTTPRequest("get", "https://icodebroker.com") printResponse("테스트", response) |
▶ requirements.txt
1 2 3 4 5 6 7 |
certifi==2024.6.2 charset-normalizer==3.3.2 idna==3.7 requests==2.32.3 urllib3==2.2.2 |
※ pip install requests 명령을 실행했다.