Java GDAX已验证REST请求HTTP GET错误400

Java GDAX已验证REST请求HTTP GET错误400,java,json,rest,get,http-headers,Java,Json,Rest,Get,Http Headers,我正在尝试使用经过身份验证的API请求从GDAX交换获取数据。我从一个简单的账户余额检查开始 我已经修改了大约8个小时的代码,除了400条回复外,似乎什么也得不到。有人能帮我理解我做错了什么吗 所有REST请求必须包含以下标头: CB-ACCESS-KEY将api密钥作为字符串 CB-ACCESS-对base64编码签名进行签名(请参阅为消息签名) CB-ACCESS-TIMESTAMP—请求的时间戳 CB-ACCESS-PASSPHRASE创建API密钥时指定的密码短语 所有请求主体都应

我正在尝试使用经过身份验证的API请求从GDAX交换获取数据。我从一个简单的账户余额检查开始

我已经修改了大约8个小时的代码,除了400条回复外,似乎什么也得不到。有人能帮我理解我做错了什么吗

所有REST请求必须包含以下标头:

  • CB-ACCESS-KEY将api密钥作为字符串
  • CB-ACCESS-对base64编码签名进行签名(请参阅为消息签名)
  • CB-ACCESS-TIMESTAMP—请求的时间戳
  • CB-ACCESS-PASSPHRASE创建API密钥时指定的密码短语
所有请求主体都应该具有内容类型application/json,并且 有效的JSON

~

CB-ACCESS-SIGN标头是通过使用创建sha256 HMAC生成的 预灰化字符串timestamp+方法上的base64解码密钥 +requestPath+body(其中+表示字符串串联)和base64对输出进行编码。时间戳值与 CB-ACCESS-TIMESTAMP报头

正文是请求正文字符串,如果没有请求,则省略 正文(通常用于GET请求)

方法应该是大写的

~

~


您需要添加请求头和请求属性

以下是您正尝试执行的操作的示例:


400表示请求格式不正确。换句话说,客户端发送到服务器的数据流不符合规则

所以,你这边有点不对劲。在官方文件中提到,您应该请求POST方法,但您有请求GET方法

 URL url = new URL("https://api.gdax.com/accounts");
 HttpURLConnection con = (HttpURLConnection) url.openConnection();
 con.setRequestMethod("POST");

希望,这可能会有帮助

您好@Shawn,您能在这里发布代码而不是链接吗?这些链接将来可能会更改。这里给出的代码使用Spring作为REST请求。如何在“纯”Java中实现这一点?
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;   
}
 URL url = new URL("https://api.gdax.com/accounts");
 HttpURLConnection con = (HttpURLConnection) url.openConnection();
 con.setRequestMethod("POST");