일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- OpenAI 개발
- wsl2 복구
- python3.11 pip
- 임베디드 시스템 해킹
- python3.11 설치
- Python3
- tool
- c++
- GEF
- vmware 반응 속도
- vhdx 파일 복구
- 공유 라이브러리는 왜 항상 같은 순서로 맵핑 될까?
- Seccomp bypass
- GDB
- 리커버릿
- z3 signed 이슈
- pwn
- docker
- pwntools
- 개발
- 실시간로깅
- Windows 부팅 오류
- pip 에러 해결
- std::cerr
- Python.h: No such file or directory
- python
- DYNAMIC Section
- 지훈현서
- VSCode C++ 표준 버전 수정
- Recoverit
- Today
- Total
OZ1NG의 뽀나블(Pwnable)
[Tips] [Python] requests 모듈 - 429 에러 본문
requests.get(URL).text 로 API의 값을 읽어오다 보면
requests.get(URL).status_code는 429 코드를 남기고 (정상적인 경우에는 200)
requests.get(URL).text에 Too many API requests.라는 내용이 남으며
Traceback (most recent call last):
File "c:\Users\000\Desktop\test.py", line 38, in Get_price_json
json_result = json.loads(response_text) # response_text = requests.get(URL).text
File "C:\Users\000\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "C:\Users\000\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\000\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
json.loads(requests.get(URL).text)를 할때 위와 같이 decode 중에 예외를 보내어 함수가 멈추게 된다.
이 때 requests.get(URL).encoding을 보면 값이 'utf-8'로 되어 있는 것을 알 수 있는데
(정상적인 경우에는 'UTF-8', 대문자이다.)
혹시나 이게 문제일까봐 encoding값을 'UTF-8' 대문자로 바꿔봐도 고쳐지지는 않았다.
문제는 처음에 말했던 429 error code가 문제인데, 이는 요청 수가 특정 시간 동안 처리 될 수 있는 속도를 초과할 때
발생하는 문제라고 한다.
따라서 해결방법으로는
1) time.sleep()을 사용해서 약간의 지연시간을 주는 것이 있다.
약 0.1초 정도 주었더니 어느정도 해결은 되었었다.
하지만 완벽히 해결된 것은 아니라 가끔씩 튀어나와 프로그램이 중간에 멈추는 일이 발생하였다.
따라서 이 방법을 시도한다면 시간 값을 적절히 세팅하는 것에 주의해야 할 것 같다.
2) try: execpt: 구문으로 재귀 사용
나는 속도가 중요했기 때문에 1)의 방법을 사용할 수는 없었다.
때문에 다른 방법을 생각하다가
def test_func(test_arg1, test_arg2):
URL = "http://testURL.com/test?test_arg1="+test_arg1+"&test_arg2="+test_arg2
try :
response = requests.get(URL)
print(response.status_code)
print(response.encoding) # test
response_text = response.text
json_result = json.loads(response_text)
except:
json_result = test_func(test_arg1, test_arg2)
pass
finally:
return json_result
위와 같이 try: execpt: 구문 + 재귀 함수를 사용하여 문제를 해결하였다.
(대충 코드를 요약하면 제대로 될때까지 시도한다는 뜻)
'Tips' 카테고리의 다른 글
[Tips] glibc 코드 보는 사이트 (0) | 2021.02.10 |
---|---|
[Tips] deb파일로 glibc 다운그레이드 하기 (0) | 2021.02.04 |
[Tips] Docker 컨테이너 이미지 import 할 때 주의점 (0) | 2021.02.02 |
[Tips] Ubuntu 16.04에서 python 3.6 설치 (0) | 2021.01.30 |
[Tips] Ubuntu 16.04에서 pwndbg 설치시 python3.5 pip syntax error 해결 방법 (0) | 2021.01.30 |