2016-02-08 2 views
4

Я использую retrofit 2.x, и я хочу записать заголовок и тело запроса и ответа.Retrofit 2.x: Заголовок журнала для запроса и ответа

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
    OkHttpClient client = new OkHttpClient.Builder() 
      .addInterceptor(interceptor) 
      .addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR) 
      .addNetworkInterceptor(new Interceptor() { 
       @Override 
       public okhttp3.Response intercept(Chain chain) throws IOException { 
        Request request = chain.request().newBuilder() 
          .addHeader("key", "value") 
          .addHeader("HEADER","HEADER Value") 
          .build(); 
        return chain.proceed(request); 
       } 


      }).build(); 

И это, как я делаю, моя проблема заключается в заголовок запроса не после входа в систему Android мониторов, но все остальное уже зарегистрирован.

Gradle Версия

compile ('com.squareup.retrofit2:retrofit:2.0.0-beta3') { 
    // exclude Retrofit’s OkHttp peer-dependency module and define your own module import 
    exclude module: 'okhttp' 
} 
compile 'com.squareup.okhttp3:okhttp:3.0.0-RC1' 
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta3' 
compile ('com.squareup.okhttp3:logging-interceptor:3.0.1'){ 
    exclude module: 'okhttp' 
} 

Использование RC1 и 3.0.1 в связи с вопросом об ошибке сообщили Bug Link

+0

Есть вы попытались переместить перехватчик регистрации в последнюю позицию, т.е. е. ниже перехватчика, который добавляет его заголовок? Согласно документам: «... перехватчики вызываются в порядке». Может быть, ответ только регистрируется до добавления заголовков? –

+0

@ david.mihola: Я пытался .. но это не сработало. –

+0

в качестве альтернативы, вы можете использовать библиотеку стетонов facebook http://facebook.github.io/stetho/ –

ответ

3

Может это кому-то помочь ...

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
interceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS); 
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 

Добавить и увидеть полные журналы и добавить этот перехватчик в последний (не знаю почему, но его, как это).

+2

Вам не нужно добавлять оба, и это в основном бесполезно. Установка 'BODY' должна показывать только журналы заголовков и тел. https://github.com/square/okhttp/blob/master/okhttp-logging-interceptor/src/main/java/okhttp3/logging/HttpLoggingInterceptor.java#L132 – oldergod

+0

@oldergod: Да, я согласен с вами, но это что было в 2016 году. :) –

1

Вместо использования addInterceptor добавить протоколирования перехватчик, используйте addNetworkInterceptor, чтобы включить заголовки, добавленные OkHttp.

Network interceptors способны:

Соблюдайте данные так же, как он будет передаваться по сети.

+0

Спасибо за то, что поделился этим . –

+0

Даже после этого я не могу просмотреть свой пользовательский заголовок, добавленный в запрос –

3

О, я нашел ошибку, если кому-то интересно:

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
OkHttpClient client = new OkHttpClient.Builder() 
     .addInterceptor(interceptor) 
     .addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR) 
     .addInterceptor(new Interceptor() { 
      @Override 
      public okhttp3.Response intercept(Chain chain) throws IOException { 
       Request request = chain.request().newBuilder() 
         .addHeader("key", "value") 
         .addHeader("HEADER","HEADER Value") 
         .build(); 
       return chain.proceed(request); 
      } 


     }).build(); 

Вы должны добавить перехватчик журнала (ваша переменная перехватчик) после запроса перехватчик, поэтому правильный ответ:

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
OkHttpClient client = new OkHttpClient.Builder() 
.addInterceptor(new Interceptor() { 
      @Override 
      public okhttp3.Response intercept(Chain chain) throws 
IOException { 
       Request request = chain.request().newBuilder() 
         .addHeader("key", "value") 
         .addHeader("HEADER","HEADER Value") 
         .build(); 
       return chain.proceed(request); 
      } 


     }) 
     .addInterceptor(interceptor) 
     .addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR) 
     .build(); 
+0

Работал для меня, спасибо! – DH28

+0

Отличный улов, спасибо –