Java GDAX经过身份验证的REST请求HTTP GET错误400

前端之家收集整理的这篇文章主要介绍了Java GDAX经过身份验证的REST请求HTTP GET错误400前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试使用经过身份验证的API请求从GDAX Exchange获取数据.我开始简单的帐户余额检查.

我一直在调整我的代码大约8个小时,似乎除了400响应之外似乎得不到任何东西.谁能帮我理解我做错了什么?

https://docs.gdax.com/#authentication

All REST requests must contain the following headers:

  • CB-ACCESS-KEY The api key as a string.
  • CB-ACCESS-SIGN The base64-encoded signature (see Signing a Message).
  • CB-ACCESS-TIMESTAMP A timestamp for your request.
  • CB-ACCESS-PASSPHRASE The passphrase you specified when creating the API key.

All request bodies should have content type application/json and be
valid JSON.

The CB-ACCESS-SIGN header is generated by creating a sha256 HMAC using
the base64-decoded secret key on the prehash string timestamp + method
+ requestPath + body (where + represents string concatenation) and base64-encode the output. The timestamp value is the same as the
CB-ACCESS-TIMESTAMP header.

The body is the request body string or omitted if there is no request
body (typically for GET requests).

The method should be UPPER CASE.

private static JSONObject getAuthenticatedData() {
    try {

        String accessSign = getAccess();


        URL url = new URL("https://api.gdax.com/accounts");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestMethod("GET");
        con.setRequestProperty("Content-Type","application/json");

        con.setRequestProperty("CB-ACCESS-KEY","d281dc......");
        con.setRequestProperty("CB-ACCESS-SIGN",accessSign);
        con.setRequestProperty("CB-ACCESS-TIMESTAMP",""+System.currentTimeMillis() / 1000L);
        con.setRequestProperty("CB-ACCESS-PASSPHRASE","xxxxx.....");

        con.setConnectTimeout(5000);
        con.setReadTimeout(5000);

        int status = con.getResponseCode();

        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer content = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            content.append(inputLine);
        }
        System.out.println(content);
        in.close();

        con.disconnect();

    }catch(Exception e) {
        e.printStackTrace();
    }
    return null;


}

public static String getAccess() {

    //Set the Secret
    String secret = "xxxxxxx........";
    //Build the PreHash
    String prehash = Instant.now().toEpochMilli()+"GET"+"/accounts";
    String hash = null;
    try {

        Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
        SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(),"HmacSHA256");
        sha256_HMAC.init(secret_key);

        hash = Base64.encodeBase64String(sha256_HMAC.doFinal(prehash.getBytes()));
        System.out.println(hash);
       }
       catch (Exception e){
           e.printStackTrace();
       }
    return hash;   
}
最佳答案
您需要添加请求标头和请求属性.

以下是您正在尝试做的事情的示例:

Create Signature

Create Headers

猜你在找的Java相关文章