Python API 연동 시
ConnectionError : ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
클라이언트에서 api 요청 실패가 발생하였고 생각보다 실패 비율이 상당하여 관련된 문제를 찾아보았다. 카카오 인프라에서는 http/1.1 관련된 문제 가능성을 무게을 두어 문제 연관성을 찾아보았다.
HTTP/1.0에서는 서버와 클라이언트간 트랙잭션 발생하면 connection 후 처리가 끝나면 바로 close 한다.
HTTP/1.1에서는 연결시 발생하는 지연을 줄이고자 connection을 재 활용한다. 이와 관련되서 Keep-Alive가 있다.
Python Requests의 Session 오브젝트 경우 connection pooling을 이용하여 keep-alive시 지속연결을 사용한다.
이때 전역으로 Session Object를 생성하는 경우 HTTP/1.1에서 타임이슈로 서버에서 connection이 끊기며 위의 에러가 발생한다.
해결책으로 전역으로 Session Object를 생성하지 않거나,
get()요청 시, session 사용하지 않게 변경한다.
def __init__(self):
self.proxies = {
'http': None,
'https': None
}
def get(self, url, **kwargs):
kwargs['proxies'] = self.proxies
return requests.get(url, **kwargs)