본문 바로가기

프로그래밍/Python

Bithumb API, status 5100, Bad Request Request Time reqTime nowTime 에러

반응형

결론 : 코드를 실행하는 컴퓨터의 시간이 빗썸 서버와 많이 차이가 나는 경우 발생함. 컴퓨터의 시간을 다시 동기화하거나, 수동으로 잘 맞추어야 한다.

문제상황: python 으로 bithumb api 를 간단히 테스트하는 코드를 작성하였는데, 에러 메시지가 발생하며, 원하는 결과를 보여주지 못했다. pybithumb 패키지를 사용하는 테스트코드였고, 코드는 이미 다른 컴퓨터에서 동작하는 것을 확인했던 코드였다.

코드 :

from pybithumb import Bithumb

# CONKEY, SECKEY 를 읽어오는 부분 생략
bithumb = Bithumb(CONKEY, SECKEY)

for coin in ["BTC", "ETH"]:
    ret = bithumb.get_trading_fee("BTC")
    if type(ret) is dict: # 에러 상황에서 에러메시지를 찍는 조건구문.
        print(coin, ret)
        continue
    print(f"""{coin} 수수료는 {ret} 원""") # 코인별 수수료를 확인하려 함.

에러메시지 :

{"status":"5100","message":"Bad Request.(Request Time:reqTime1654562814836/nowTime1654562787018.)" }

빗썸 API 문서에서 에러메시지에 대한 설명은 https://apidocs.bithumb.com/docs/api-%EC%A3%BC%EC%9A%94-%EC%97%90%EB%9F%AC-%EC%BD%94%EB%93%9C 에 있고, 해당하는 내용은 

에러 코드 에러 메시지 설명
5100 Bad Request(SSL) https 호출 URL이 아님
5100 Bad Request(Bad Method) POST 형식으로 호출하지 않음
5100 Bad Request(Auth Data) 잘못된 요청 내용
5100 Bad Request
(Request Time:reqTime{호출시간}/nowTime{서버시간})
API 서버 시간과 API 호출 시간이 20초 이상 차이남
(시간 기준: KST)

에러메시지에서 알려준 reqTime과 nowTime 의 차이는 27818 ( = 1654562814836 - 1654562787018 ) 였고, 이 값은 pybithumb 소스 안을 확인해 보면 ( time.time()*1000 으로 계산하여 request 시에 넘겨준다.), 마이크로초 단위이다. 그래서 계산해 보면, 27.818 초의 차이이고, 문서에서 말했던 20초를 넘는 시간차였다.

컴퓨터의 시간을 다시 동기화해 보았으나, 자동동기화가 계속 실패하여, 수동으로 시간을 다시 설정하여 바꾸어 준 이후에 해당 에러메시지가 사라졌다.

728x90