본문 바로가기
Data Science

[오류 해결] unable to get local issuer certificate, ConnectionResetError(54, 'Connection reset by peer) + InsecureRequestWarning

by Lora Baek 2024. 7. 29.
300x250

python으로 request를 요청하던 중, API 토큰이 만료되어 새로 발급받은 토큰을 넣어줬다.

그 다음부터 API 호출이 되지 않았다. unable to get local issuer certificate라는 SSL 인증 관련 오류가 계속 발생하는 것으로 보여

아래와 같이 verify=False 파라미터를 이용하여 SSL 인증을 하지 않도록 설정해준 다음,

정상적으로 호출이 완료되었다.

request.post(url=url, headers=headers, verify=False)

 

그 다음부터는 간헐적으로 ConnectionResetError(54, 'Connection reset by peer) 오류가 발생했다.

해당 오류는 연결이 끊겼다는 메세지인데,

매일 출근해서 내가 request를 보내는 서버 측에 내가 API를 요청했을 때 처음에는 안 되다가,

1분~5분쯤 후에 다시 요청을 하면 정상적으로 호출이 되는 것을 발견하고

호출 실패 시 1분 간격으로 최대 5회 API 재요청을 할 수 있도록 아래와 같이 코드를 다시 작성했다.

import requests
import time

### url, headers 설정하는 부분 ###
#

retry_attempts = 5
for attempt in range(retry_attempts + 1):
	try:
    	requests.request(url=url, headers=headers, verify=False)
        
        ### url 호출 성공 시 수행할 작업을 정의하는 부분 ###
        #
        
        print("API 호출 완료")
    	break
        
    except Exception as err:
    	print("API 호출 실패 : " + str(err))
        if attempt < retry_attempts:
        	print("1분 후" + str(attempt+1) + "회차 재시도")
            time.sleep(60)
        else:
        	print("재시도 횟수 초과로 API 호출 실패")

 

 

이제 1회차 시도에는 실패하고, 1분 후에 다시 요청하면 정상적으로 호출이 되어 내가 원하는 작업을 수행하도록 만들었다.

터미널에서는 아래와 같이 확인할 수 있다.

 

그리고 오류는 아니지만 InsecureRequestWarning 경고 메세지가 발생하기도 했다.

 

나의 경우에는 당분간은 경고 메세지를 확인하고 싶어서

코드에 호출 실패 시 str(err)를 추가하여 어떤 오류인지 확인할 수 있도록 만들었지만

이런 경고 메세지를 없애고 싶다면 아래 2가지 방법이 있다.

 

urllib3 라이브러리를 이용하는 방법

from urllib3.exceptions import InsecureRequestWarning
from urllib3 import disable_warnings
disable_warnings(InsecureRequestWarning)

 

requests 라이브러리를 이용하는 방법

import requests
requests.packages.urllib3.disable_warnings()

댓글