【问题标题】:Retrofit Headers Not Working Issue改造标头不工作问题
【发布时间】:2018-07-23 13:49:01
【问题描述】:

我正在使用 Postman 通过 url 访问服务器 GET 调用。并在邮递员的标题部分添加如下标题,因此当在邮递员中运行时,它可以工作并在正文中发送数据,但在使用 Retrofit 的 android 中无法使用 401 错误。

X-APIClient: {"apiClientId":"testing-account-cli","apiToken":"$2y$10$C/quaRQUsrWa30hjQJuckOXbW9kIZ.W3G1TlLMYg6lr/XDUes7SM."}
X-Header-Request: {"deviceId":"ffffffff-daac-6513-4eca-0c41298e00df"}

它适用于 Postman。但是在带有 Retrofit 的 Android 中,它不起作用 401 错误。

1)

   @GET("user-list")
   Call<User> getUsers(@HeaderMap Map<String, String> headers);

2)

    public static Map<String,String> addCustomHeaders()
    {
        headers = new HashMap<>();
        headers.put("X-APIClient",
                "\"apiClientId\":\"testing-account-cli\",\"apiToken\":\"$2y$10$C/quaRQUsrWa30hjQJuckOXbW9kIZ.W3G1TlLMYg6lr/XDUes7SM.");
        headers.put("X-Header-Request", "\"deviceId\":\"ffffffff-daac-6513-4eca-0c41298e00df")
        ;
        return headers;
    }

3) 使用下面调用 GET 总是失败

 Call<User> call = api.getUsers(RetrofitClient.addCustomHeaders());


        call.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                Log.i(TAG, "GET User Success." + response.body().toString());

            }

            @Override
            public void onFailure(Call<User> call, Throwable t) {
                Log.i(TAG, "GET Failed Users." + t.getMessage());

            }
        });

请帮忙看看有什么问题。因为它总是抛出 401,身份验证为假,授权为假。

【问题讨论】:

    标签: android retrofit retrofit2


    【解决方案1】:

    试试下面的函数,我把标题分开了。

        public static Map<String,String> addCustomHeaders()
    {
        HashMap<String, String> headers = new HashMap<>();
        headers.put("apiClientId" ,"testing-account-cli");
        headers.put("apiToken", "$2y$10$C/quaRQUsrWa30hjQJuckOXbW9kIZ.W3G1TlLMYg6lr/XDUes7SM.");
        headers.put("deviceId","ffffffff-daac-6513-4eca-0c41298e00df");
        return headers;
    }
    

    【讨论】:

      【解决方案2】:

      对标题使用拦截器

      public class HeaderInterceptor implements Interceptor {
       @Override
          public Response intercept(Chain chain) throws IOException {
       Request request = chain.request();
      request = request.newBuilder()
                          .header("apiClientId", "testing-account-cli")
       .header("apiToken","$2y$10$C/quaRQUsrWa30hjQJuckOXbW9kIZ.W3G1TlLMYg6lr/XDUes7SM.")
      .header("deviceId","ffffffff-daac-6513-4eca-0c41298e00df")
                          .build()
       Response response = chain.proceed(request);
        return response;
      }
      

      //将该类添加到改造类中

      .addInterceptor(httpLoggingInterceptor)
                      .addInterceptor(new HeaderInterceptor())
      

      【讨论】:

        猜你喜欢
        • 2017-06-27
        • 1970-01-01
        • 2016-10-06
        • 1970-01-01
        • 2014-01-07
        • 1970-01-01
        • 1970-01-01
        • 2020-04-26
        • 2019-12-17
        相关资源
        最近更新 更多