当前位置: 首页 > 知识库问答 >
问题:

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

王才英
2023-03-14

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

  • cb-access-key作为字符串的api密钥。
  • cb-access-对base64编码的签名进行签名(请参见对消息进行签名)。
  • cb-access-timestamp请求的时间戳。
  • cb-access-passphrase创建API密钥时指定的passphrase。

所有请求主体都应该具有内容类型application/json,并且应该是有效的JSON。

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;   
}

共有1个答案

常波鸿
2023-03-14

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

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

创建签名

 类似资料:
  • 经过身份验证的请求可用于获取授权代码令牌,以访问系统中的所有者资源。 对授权端点发出的请求会导致用户身份验证,并在向授权端点发送请求时提供明确的凭据。 经过身份验证的请求包含以下参数 - response_type - 这是一个必需参数,用于将值设置为'code',用于请求授权代码。 如果授权请求中没有'response_ type'参数,则授权服务器返回错误响应。 由于无效或不匹配的重定向URI

  • 我得到了一个使用fcm发送通知的应用程序,当我通过控制台发送消息时一切正常,但是当我尝试通过php(curl-post)或postman(firefox扩展)发送消息时,我得到了一个身份验证错误(甚至使用了密钥) 字符串(304)“{”错误:{”代码:401,“消息”:“请求缺少所需的身份验证凭据。应为OAuth 2访问令牌、登录cookie或其他有效身份验证凭据。请参阅https://devel

  • 问题内容: 我正在使用HP ALM版本12.55.113。我正在尝试通过REST- API自动上传测试结果。经过身份验证并尝试读取一个简单的缺陷后,我收到了401未经身份验证的错误。我使用以下示例代码检索有效的LWSSO和QCSession Cookie: 我得到以下控制台输出: 登录:InboundJaxrsResponse {context = ClientResponse {method =

  • 我试图用我正在使用的API进行身份验证,但是当我试图登录时,我收到了这样的响应:加载资源失败:服务器响应状态为404(未找到)[http://localhost:8080/localhost: 5000/api/登录] 我认为问题出在axios上,因为它使用我的本地Vue应用程序地址apiAdress来执行请求。 主要的js: 模块/身份验证。js: login.vue:

  • 我们想使用Jitsi REST API创建一个会议。我们的Jitsi实例已经受到Prosody的保护:只有某些用户可以主持会议(他们必须使用用户和密码凭据进行身份验证才能主持会议室)。现在,在他们这么做之后,计划是通过创建一个来宾密码来保护房间,聊天伙伴/来宾需要输入该密码才能加入会议。这个过程需要通过REST API实现自动化:我们希望通过REST API创建会议,并传递一个需要来宾输入的密码。

  • 我正在使用以下代码执行一些请求: 我收到的答复是: 执行http://testrail.mypublisher.com:80请求 ---------------------------------------- HTTP/1.1 401未授权日期:周三,11月4日2015 17:19:05GMT服务器:Apache X-Powerd-By:PHP/5.3.3 Content-Llong:87连接:

  • 问题内容: 我有以下代码: 现在,第二个http调用失败,出现401访问被拒绝错误。不同的REST客户端(firefox插件)可以正确地从服务器获取详细信息,因此我知道服务器端没有错。我是否需要传递某种会话字符串或上次请求中获得的内容? 问题答案: 好的。我已经解决了。我只需要创建一个饼干罐。 我很惊讶golang http req / client类没有默认处理此问题。 我必须使用的代码是: 然

  • 我试图得到一个API查询到python。命令行 给出一些json输出。myToken是一个十六进制变量,始终保持不变。我想从python中调用它,这样我就可以循环使用不同的ID并分析输出。有什么想法吗?在需要身份验证之前,我已经使用urllib2完成了这项工作。我还查看了requests模块,但不知道如何实现。 非常感谢。