gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:14 26 4
gpt4 key购买 nike

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

最佳答案

您需要添加请求 header 和请求属性。

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

Create Signature

Create Headers

关于Java GDAX 身份验证的 REST 请求 HTTP GET 错误 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47662208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com