【问题标题】:Retrofit 2 add Header - Logging interceptorRetrofit 2 添加 Header - 日志拦截器
【发布时间】:2020-05-31 22:20:23
【问题描述】:

我正在向 get 请求添加标头 - 服务器端没有收到标头。我正在使用addConverterFactory(ScalarsConverterFactory.create())。代码:

        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(new Interceptor() {
                    @NotNull
                    @Override
                    public okhttp3.Response intercept(@NotNull Chain chain) throws IOException {
                        Request originalRequest = chain.request();
                        Request newRequest = originalRequest.newBuilder()
                                .addHeader("Header","123")
                                .build();
                        return chain.proceed(newRequest);
                    }
                })
                .addInterceptor(loggingInterceptor)
                .build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("URL")
                .addConverterFactory(ScalarsConverterFactory.create())
                .client(okHttpClient)
                .build();

        retrofit2.Call<String> call = apiRetrofitInterface.getString("URL");
        call.enqueue(new Callback<String>() {
            @Override
            public void onResponse(retrofit2.Call<String> call, retrofit2.Response<String> response) {
                 // 
            }

接口代码:

public interface ApiRetrofitInterface {

    @GET
    Call <String> getString(@Url String url);
}

是否有可能标头在 Logging Interceptor 中但服务器没有收到?

 I/okhttp.OkHttpClient: --> GET "MY URL"
 I/okhttp.OkHttpClient: Header: 123
 I/okhttp.OkHttpClient: --> END GET
 I/okhttp.OkHttpClient: <-- 400 Bad Request "MY URL" (137ms)
 I/okhttp.OkHttpClient: X-Powered-By: Express
 I/okhttp.OkHttpClient: Access-Control-Allow-Origin: *
 I/okhttp.OkHttpClient: Access-Control-Allow-Headers: content-type
 I/okhttp.OkHttpClient: Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS
 I/okhttp.OkHttpClient: Content-Type: text/html; charset=utf-8
 I/okhttp.OkHttpClient: Content-Length: 39
 I/okhttp.OkHttpClient: ETag: W/"27-Gy6wj20Vfpjmp7p+PeGaPrL9u2U"
 I/okhttp.OkHttpClient: Date: Sun, 31 May 2020 21:53:29 GMT
 I/okhttp.OkHttpClient: Connection: keep-alive
 I/okhttp.OkHttpClient: <-- END HTTP

【问题讨论】:

  • “服务器端没有收到标头”——你如何确定这一点?您是否尝试过使用 Charles Proxy 之类的工具来检查实际通信,查看请求中是否包含标头?
  • @CommonsWare - 我的合作伙伴在服务器端工作。我会转发你的消息。我的代码看起来还可以吗?

标签: android logging header retrofit2 interceptor


【解决方案1】:

如果标头不在 w3cschool 协议中,它可能会被防火墙删除您传输的数据使用的网关。

所以在http协议中使用header key。

希望能帮到你

【讨论】:

  • 如何在 HTTP 协议中使用标头?
  • 我的意思是调用 addHeader(key,value) 键需要访问 http/https 协议。 http/https 协议规定了一系列标头。用那个。不要拿你定制的钥匙。
  • 如果没有,防火墙可能会删除协议中没有规定的标头
猜你喜欢
  • 2019-10-20
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 2016-01-02
  • 2016-11-15
  • 2015-12-25
  • 1970-01-01
相关资源
最近更新 更多