GDAX Java Bad Request

Ich versuche, private Daten auf GDAX anzufordern, bekomme aber immer wieder schlechte Anfragen. Kann nicht herausfinden, was ich falsch mache. Bitte helfen Sie.

private static JsonObject getAuthenticatedData() {
        try {

            String accessSign = getAccess();
            System.setProperty("http.agent", "Java Client");

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

            con.setRequestProperty("CB-ACCESS-KEY", "accesskey");
            con.setRequestProperty("CB-ACCESS-SIGN", accessSign);
            con.setRequestProperty("CB-ACCESS-TIMESTAMP", ""+System.currentTimeMillis() / 1000L);
            con.setRequestProperty("CB-ACCESS-PASSPHRASE", "passphrase");
            con.setRequestProperty("Content-Type", "application/json");


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

            String status = con.getResponseMessage();
            System.out.println(status);

            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;


    }

Und das:

public static String getAccess() {

    //Set the Secret
    String secret = "secret==";
    //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("UTF-8")));
         hash = hash.replace("\n", "");
        System.out.println(hash);
       }
       catch (Exception e){
           e.printStackTrace();
       }
    return hash;   
}
Welche Art von Fehlern erhalten Sie? Sollte toEpochMilli() in Ihrer getAccess()-Methode, String prehash, nicht in Sekunden sein?
400 - BadRequest
egal, was ich tue. immer 400 schlechte Anfrage ohne andere Beschreibung.

Antworten (1)

Können Sie versuchen, mit den folgenden Codezeilen in Ihren Methoden hinzuzufügen / zu ändern:

privates statisches JsonObject getAuthenticatedData() {

  String timestamp = Instant.now().getEpochSecond() + "";
  String accessSign = getAccess(timestamp);


  con.setRequestProperty("CB-ACCESS-TIMESTAMP", Zeitstempel);
  con.setRequestProperty("akzeptieren", "application/json");
}
öffentlicher statischer String getAccess(String timestamp) {

  String prehash = timestamp+"GET"+"/accounts";
  byte[] secretDecoded = Base64.getDecoder().decode(secret);
  SecretKeySpec secret_key = new SecretKeySpec(secretDecoded, "HmacSHA256");

  hash = Base64.getEncoder().encodeToString(sha256_HMAC.doFinal(prehash.getBytes()));

  Hash zurückgeben;
}