일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 운영체제
- 파이썬 챌린지
- 러스트 예제
- Reversing
- 자바 기초
- C
- java
- OS
- 자바
- 파이썬
- 러스트
- 파이썬 첼린지
- data communication
- 데이터베이스
- 러스트 프로그래밍 공식 가이드
- Rust
- 데이터 통신
- 백준
- Database
- 백준 러스트
- 알고리즘
- Python
- ubuntu
- 오라클
- 자바 개념
- 파이썬 알고리즘
- 오라클DB
- 우분투
- Operating System
- Python challenge
- Today
- Total
IT’s Portfolio
[Python] 파이썬 requests 모듈의 HTTPAdapter와 Retry 본문
기본적인 웹 페이지 requests
def basic_req():
print('basic_req, hello!')
with requests.Session() as s:
res = s.get("https://httpbin.org/get")
print(res.status_code)
print(res.headers)
print(f"your ip is {res.json()['origin']}")
print("================================")
HTTPAdapter를 사용하여 요청하는 requests
def adapter_req():
print('adapter_req, hello!')
with requests.Session() as s:
adapter = HTTPAdapter(max_retries=3)
s.mount("http://", adapter)
s.mount("https://", adapter)
res = s.get("https://httpbin.org/get")
print(res.status_code)
print(res.headers)
print(f"your ip is {res.json()['origin']}")
print("================================")
session.mount(prefix, adapter)
: http://
와 https://
라는 prefix를 붙인다.
이는 해당 세션을 사용하고 http://
, https://
로 시작하는 모든 주소에 대한 요청에 adapter를 마운트 한다는 의미이다.
결과는 기본 requests와 같다.
HTTPAdapter와 Retry를 사용하여 요청하는 requests
def retry_req():
with requests.Session() as s:
retries = 5
backoff_factor = 0.3
status_forcelist = (500, 502, 504)
retry = Retry(
total=retries,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status_forcelist=status_forcelist)
adapter = HTTPAdapter(max_retries=retry)
s.mount('http://', adapter)
s.mount('https://', adapter)
res = s.get("https://httpbin.org/get")
print(res.status_code)
print(res.headers)
print(f"your ip is {res.json()['origin']}")
print("================================")
파이썬으로 서버에게 요청을 보낼 때 서버가 죽었거나 정상이 아닐 때, 일정한 횟수로 Retry
할 수 있도록 구현하는 것이 바람직하다. 때문에 HTTPAdapter
와 Retry
를 사용하여 코딩을 하는 것이 적합하다.
먼저 Session
객체와 Retry
객체를 생성하고 생성한 Session
객체에 HTTPAdapter
객체를 마운트 한 후 요청을 전송한다.
Retry
객체에서 total
은 총 시도 횟수이며, backoff_factor
는 재시도 횟수 간 대기 시간을 점차적으로 얼만큼의 크기만큼 늘릴지에 대한 설정, status_forcelist
는 재시도를 해야하는 status code 튜플이다.
총 시도 횟수 공식: {backoff factor} * (2 ^ ({number of total retries} - 1))
requests
에 header
를 추가하고 싶다면, session.headers.update({'User-Agent': 'Mozilla/5.0 ~~~'})
형태로 추가하면 된다.
Retry
객체를 생성할 때 total
파라미터에 재시도 횟수를 적어주는데 Retry
, 즉 재시도이기 때문에 1을 기입하면 requests
를 1번 보내고 실패했다면 1번 더 보내는것으로 생각했지만 실제로는 총 requests
를 1번만 보낸다.
따라서 해당 파라미터는 총 시도 횟수라고 생각하는것이 좋다. 1번 requests
를 보내고 실패했을 때 딱 한 번만 더 재시도를 진행하고 싶다면 total=2
라고 적어줘야 한다.
마찬가지로 결과는 기본적인 requests와 같다.
'Development Study > Python' 카테고리의 다른 글
[Mac] Python 개발환경 구축(Miniforge, Visual Studio Code) (0) | 2022.07.19 |
---|---|
[Python] isinstance() 함수에 대해서 (0) | 2021.01.08 |
[Python] 코딩도장 - 주사위 도박 (0) | 2021.01.04 |
[Python] 로또 번호 생성기 (0) | 2020.12.23 |
[Python] 함수의 반환 형태 지정하기 (0) | 2020.12.05 |