상세 컨텐츠

본문 제목

How to Solve HTTPConnectionPool Error In Python

Dev Type

by ai developer 2023. 6. 22. 23:54

본문

개발을 하다 보면 많은 API를 다루게 된다.

많은 개발자들이 API를 통해 원하는 데이터를 쉽게 가져오고 이를 활용한다.

그리고 python을 이용한다면 간단하게 requests를 import 해서 사용할 것이다.

API가 기능을 대신해 줘서 사용하는 경우도 있지만 별다른 기능없이 가진 데이터 자체만 제공해주는 경우도 있다. 

예를 들어 영화 정보 제공이라든지, 날씨 정보 제공이라든지 이런 경우다.

근데 만약 그 API에서 가진 모든 영화정보를 요청해 이 데이터를 나만의 데이터베이스로 구축해 자산화하고 싶다면,

모든 영화의 각각의 상세정보를 불러올 수 있는 키값 목록을 가져오고 가져온 키값 목록을 이용해 loop를 돌며 아주 방대한 요청을 진행해야 할 것이다.

 

이 때, 공급하는 서버에 무리를 덜 주기 위해 from time import sleep으로 sleep(0.5) 이런 식으로 서버에게 부담을 덜 주는 방법도 있지만, 자주 발생하는 건 HTTPSConnectionPool 에러가 자주 발생한다. 이 에러의 내용을 살펴보면 Max retries exceeded with url 이런 식으로 뒤에 적혀 있어 내가 너무 자주 요청해서 날 블록한건가 싶은 생각이 들지만 그런 경우도 있고 아닌 경우도 있다.

 

더 뒤에 내용에 SSLError라는 말이 붙는다면 requests.get('<URL>', verify=False) 이런 식으로 verify하지 않도록 옵션을 준다면 해결이 된다! 🚀 (검색해 보니 근본적 해결을 위해 pyOpenSSL을 업데이트 해주면 된다고 해서 업데이트 해봤지만 별 소용이 없었고 이미 업데이트된 상태였다...😭)

그리고 만약 뒤에 refuse ... server 이런 늬앙스의 글귀가 보인다면 조금 기다렸다가 다시 요청해 보면 잘 될 확률이 높다.⭐️

(제공자가 블랙리스트화해서 요청을 막는 옵션을 두지 않았다면의 가정)

 

이렇게만 하면 모든 문제가 해결될 것 같다고 착각했지만 몇 십만번 요청하다 보니 상대 서버에서도 부담을 느낀 듯 하다.

어느 순간 병목현상처럼 요청을 했는데 서버에서 결과를 주지 않는다. 오류인지 성공인지도 답이 없고 몇 시간이 지나도 답이 없다...

이런 경우 계속 기다리면 영원히 기다려야 할 수 있다😱

requests.get('<URL>', verify=False, timeout=10) 이런 식으로 timeout을 줘서 API 용량이 어느정도 올거고 정상적인 상태에서 대기해 줄 만한 초를 정해 파라미터에 넣어주면 영원한 기다림에서 쿨한 기다림으로 바꿔준다. 

이렇게 쿨한 마무리!

 

 

300x250

관련글 더보기

댓글 영역