我正在尝试使用经过身份验证的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;   
}