加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-05-24 07:33:22 所属栏目:Java 来源:互联网
导读:我正在尝试使用经过身份验证的API请求从GDAX Exchange获取数据.我开始简单的帐户余额检查.我一直在调整我的代码大约8个小时,似乎除了400响应之外似乎得不到任何东西.谁能帮我理解我做错了什么?https://docs.gdax.com/#authentication All REST requests must

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

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读