비트멕스 REST API를 자바로 개발하고 있는데요. filter 파라미터 사용때문에 난관에 봉착했습니다.
filter에 값을 줄때 JSON key value 형식으로 주도록 되어있는데 filter 값만 넣어주면 에러가 발생하네요.
예를 들어 GET /order 에 filter={"open": true} 값을 넣어주려고 하는데요. url 인코딩해서 요청하면 아래와 같이 401에러가 뜹니다.
---------------------------------------------------------------------------------------------------------------------------------------------------
url >>>> https://www.bitmex.com/api/v1/order?symbol=XBTUSD&filter=%7B%22open%22%3A%20true%7D
signature datas >>>> GET/api/v1/order?symbol=XBTUSD&filter=%7B%22open%22%3A%20true%7D1569121893
signature encoded >>>> f0fba4e4eae6d55e9f286aa5e14de821c823584f0f59bca35cb9c5160a49ee02
2019-09-22 11:11:35.164 ERROR 13520 --- [nio-8813-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException: 401 Unauthorized] with root cause
org.springframework.web.client.HttpClientErrorException: 401 Unauthorized
---------------------------------------------------------------------------------------------------------------------------------------------------
url인코딩을 안하면 아래 같은 에러가 발생하구요.
---------------------------------------------------------------------------------------------------------------------------------------------------
url >>>> https://www.bitmex.com/api/v1/order?symbol=XBTUSD&filter={"open": true}
signature datas >>>> GET/api/v1/order?symbol=XBTUSD&filter={"open": true}1569120740
signature encoded >>>> 11f847730f916adf4dee6aa030a972b71279dad2ac02d9eb3da75193e3a0d8d4
2019-09-22 10:52:20.287 ERROR 8904 --- [nio-8813-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: Not enough variable values available to expand '"open"'] with root cause
java.lang.IllegalArgumentException: Not enough variable values available to expand '"open"'
---------------------------------------------------------------------------------------------------------------------------------------------------
비트멕스 사이트의 API 키 사용법에도 URL인코딩해서 값을 전송하는 것으로 되어있고, API Explore에서 filter={"open": true} 값을 넣어서 시도하면 200리턴하고, 개발자도구에서 url 찍어보면 아래처럼 똑같이 url인코딩을 해서 보냅니다.
https://www.bitmex.com/api/v1/order?filter=%7B%22open%22%3A%20true%7D&count=100&reverse=false
물론 filter 파라미터를 아예 빼버리면 값을 잘 가져오지만 filter에 JSON 형식으로 값을 보낼때 어떻게 처리해야 하는지 당최 모르겠네요. 고수님들의 조언 부탁드립니다.
첫번째 케이스에서는 일단 인증 파라미터가 없어서 난 에러구요.
두번째는 인수전달이 정상적으로 안된거구요.