【问题标题】:Create bearer authorization header in OkHttp java在 OkHttp java 中创建不记名授权标头
【发布时间】:2020-07-15 04:53:27
【问题描述】:

我需要在java中使用OkHttp3作为HTTP客户端,并在请求中发送Authorization标头。

示例:

授权:不记名 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRaswczovL2F1dGgucGF4aW11bS5djb20iLCJhdWQiOiJodHRwczovL2FwaS5wYXhpbXVtLmNvbSIsIm5iZiI6MTQ0ODQzNzkyMCwiZXhwIjoxNDQ4NDgxMTIwLCJzdWIiOiIzNzExZDk1YS03MWU1LTRjM2ItOWQ1YS03ZmY3MGI0NDgwYWMiLCJyb2xlIjoicGF4OmIyYjphcHA6dXNlciJ9.YR8Gs7RVM-q5AxtHpeOl2zYe-zKxh5u39TUeTbiZL1k

如何使用我的用户名和密码创建此令牌? 用户名:test 密码:测试

【问题讨论】:

    标签: java okhttp3


    【解决方案1】:

    根据文档here

      private final OkHttpClient client = new OkHttpClient();
      private final String url = "http://test.com";
    
      public void run(String token) throws Exception {
        Request request = new Request.Builder()
        .url(url)
        //This adds the token to the header.
        .addHeader("Authorization", "Bearer " + token)
        .build();
         try (Response response = client.newCall(request).execute()) {
              if (!response.isSuccessful()){
                 throw new IOException("Unexpected code " + response);
              }
    
             System.out.println("Server: " + response.header("anykey"));
    
         }
      }
    

    【讨论】:

    • 谢谢感谢,OkHttp3 库中有一个名为 Credentials 的 Java 类。它从用户名和密码创建基本授权。如何从用户名和密码创建令牌?
    • 小心。应该是.addHeader("Authorization","Bearer "+ token),否则你会得到“IllegalArgumentException: unexpected char 0x20 in header name”。
    【解决方案2】:

    上述答案导致正确的路径,但需要进行一些更改。

    private  Response requestBuilderWithBearerToken(String userToken) throws IOException {
               OkHttpClient client = new OkHttpClient();
               Request request = new Request.Builder()
                       .url(YourURL)
                       .get()
                       .addHeader("cache-control", "no-cache")
                       .addHeader("Authorization" , "Bearer " + userToken)
                       .build();
    
               return  client.newCall(request).execute();
    

    【讨论】:

    • 这段代码对我有用,与标记的答案不同,它给了我“未经授权的令牌”
    【解决方案3】:

    适用于安卓 Okhttp 版本

    public Call post(String url, String json, Callback callback, String token) {
        OkHttpClient client = new OkHttpClient();
    
        RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
            .url(url)
            .addHeader("Authorization", "Bearer " + token)
            .post(body)
            .build();
        Call call = client.newCall(request);
            call.enqueue(callback);
        return call;
    }
    

    记得在 Bearer 关键字后面加空格。

    【讨论】:

    • 您好,欢迎来到 StackOverflow。以供将来参考,为了提高您的答案的质量,以便其他可能查看它的人,添加代码 cmets 解释您的代码在做什么总是好的。
    猜你喜欢
    • 2012-08-18
    • 2016-06-14
    • 2020-03-27
    • 2020-11-13
    • 2021-10-12
    • 2013-01-21
    • 1970-01-01
    • 2019-07-23
    • 2019-03-23
    相关资源
    最近更新 更多