![](/img/trans.png)
[英]org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request
[英]org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request binance
我正在嘗試使用 RestTemplate 向幣安發布訂單。 下一個簡化代碼:
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("user-agent",
"Mozilla/5.0 " +
"(Windows NT 10.0; Win64; x64) " +
"AppleWebKit/537.36 (KHTML, like Gecko) " +
"Chrome/54.0.2840.99 " +
"Safari/537.36");
headers.add(X_MBX_APIKEY, apiKey);
HttpEntity<String> entity = new HttpEntity<>("parameters", headers);
long time = new Date().getTime();
String params1 = "symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.005&recvWindow=50000" +
"×tamp=" + time;
String signature = encodeSHA256(secretKey, params1);
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString("https://api.binance.com/api/v3/order/test")
.queryParam("symbol", "LTCBTC")
.queryParam("side", "BUY")
.queryParam("type", "LIMIT")
.queryParam("timeInForce", "GTC")
.queryParam("quantity", "1")
.queryParam("price", "0.005")
.queryParam("recvWindow", "50000")
.queryParam("timestamp", time)
.queryParam("signature", signature);
ResponseEntity<String> response = restTemplate.exchange(builder.build().toUri(), HttpMethod.POST, entity, String.class);
所以我得到下一個例外:
org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: [{"code":-1104,"msg":"Not all sent parameters were read; read '9' parameter(s) but was sent '10'."}]
at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:101)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:170)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:112)
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:782)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:740)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:714)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:602)
郵遞員中的相同請求效果很好。 那么這個錯誤的原因是什么呢? 因為請求中的參數數量是9個。 也許 binance api 將標頭中的 apiKey 識別為第 10 個參數? 先感謝您。
我不知道為什么 restTemplate 不起作用,但我從使用 okhttp3 的郵遞員那里復制了代碼。 現在它起作用了。
long time = new Date().getTime();
String params = "symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1" +
"&price=0.004&recvWindow=50000" +
"×tamp=" + time;
String signature = encodeSHA256(marketKey, params);
Request request = new Request.Builder()
.url("https://api.binance.com/api/v3/order" +
"?symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1" +
"&price=0.004&recvWindow=50000" +
"×tamp=" + time +
"&signature=" + signature)
.post(new RequestBody() {
@Nullable
@Override
public MediaType contentType() {
return null;
}
@Override
public void writeTo(BufferedSink bufferedSink) throws IOException {
}
})
.addHeader("X-MBX-APIKEY", apiKey)
.build();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.