gpt4 book ai didi

android - Retrofit 2 使用 HttpLoggingInterceptor.Level.BODY 在日志中打印空响应主体

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:07:46 33 4
gpt4 key购买 nike

我使用 Retrofit 2.0.0。这是构建我的 HTTP 客户端的代码

protected OkHttpClient getHttpClient(){
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(
chain -> {
Request original = chain.request();

Request.Builder requestBuilder = original.newBuilder();

requestBuilder.header("Accept-Language", App.getInstance().getPrefs().getSelectedLanguage().toLowerCase());
requestBuilder.header("Accept-Encoding", "gzip");

if(API.this instanceof PrivateAPI){
LoginResponse loginResponse = AuthManager.getInstanse().getLoginResponse();
requestBuilder.header("Authorization", String.format("%s %s",
loginResponse.getTokenType(),
loginResponse.getAccessToken()));
}

requestBuilder.method(original.method(), original.body());

Request request = requestBuilder.build();
return chain.proceed(request);
});

if(BuildConfig.DEBUG){
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.addInterceptor(loggingInterceptor);
}

return builder.build();
}

下面是我如何使用它来初始化我的 Retrofit API 接口(interface):

    Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(getGson()))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(getHttpClient())
.build();

apiService = retrofit.create(PrivateAPIInterface.class);

直到昨天,我才能完全登录 logcat,因为它应该是这样的。但突然间,我的日志中开始出现空响应体。所以这是我现在得到的日志示例:

  D/OkHttp: --> GET http://MY_DOMAIN/utility/gaz?branchid=&phone=21919&customerid= HTTP/1.1
D/OkHttp: Accept-Language: hy
D/OkHttp: Accept-Encoding: gzip
D/OkHttp: Authorization: 0yXK65Go_hRPT32WIP4DAKjmzIaM0riSLlybHhusvwmYJSxTdTVBrkL5CaqopXgrOuNFL5xvR5uVwCbprWrxvfYTMJ1I_AUmd5TKdNL4ptkUrJuOy1kGiule_yveCFv0GbTiAXhYjdfynJICJEVWc54ibnIv_Q14dLpPuVle5IaRuHmza2Pavkrhzi42sfMsK0Qpxaueu8eRPysk6MP9WkTnSKYIAThuq3sHq8RGAnkaLBx
D/OkHttp: --> END GET
D/OkHttp: <-- 200 OK http://MY_DOMAIN/utility/gaz?branchid=&phone=21919&customerid= (394ms)
D/OkHttp: Content-Length: 8527
D/OkHttp: Content-Type: application/json; charset=utf-8
D/OkHttp: Server: Microsoft-IIS/7.5
D/OkHttp: X-Powered-By: ASP.NET
D/OkHttp: Date: Wed, 16 Mar 2016 12:30:37 GMT
D/OkHttp: OkHttp-Sent-Millis: 1458131438086
D/OkHttp: OkHttp-Received-Millis: 1458131438438
D/OkHttp: }
D/OkHttp: <-- END HTTP (8527-byte body)

如您所见,我得到的不是响应正文的所有内容都是 D/OkHttp: }。但是在 Postman 中,我看到了一个正常的响应主体,并且在我的应用程序中一切正常,所以问题仅在于日志记录。

谁能帮我理解为什么会发生这种情况?

附言如果请求有正文,我会看到请求正文,问题仅在于响应正文。

最佳答案

对于 retrofit-2,您应该使用 OkHttp3 来获取完整日志。将其添加到您的依赖项中:compile 'com.squareup.okhttp3:logging-interceptor:3.0.1'

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();

Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://example.com")
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();

return retrofit.create(ApiClient.class);

关于android - Retrofit 2 使用 HttpLoggingInterceptor.Level.BODY 在日志中打印空响应主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36035943/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com