2016-02-08 4 views
4

J'utilise retrofit 2.x et je veux enregistrer l'en-tête et le corps de la demande et la réponse.Rénovation 2.x: en-tête de journal pour la demande et la réponse

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(); 

Et ce que je fais, mon problème est en-tête de la demande ne sont pas connecté dans le Moniteur Android, mais tout repos est connecté.

Gradle Version

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' 
} 

En utilisant RC1 et 3.0.1 en raison de problème de bug signalé Bug Link

+0

Avez vous avez essayé de déplacer l'intercepteur de journalisation à la dernière position, je. e. ci-dessous l'intercepteur qui ajoute l'en-tête? Selon les docs: '... les intercepteurs sont appelés dans l'ordre. 'Peut-être que la réponse est juste enregistrée avant que les en-têtes ne soient ajoutés? –

+0

@ david.mihola: j'ai essayé .. mais ça n'a pas marché. –

+0

comme alternative, vous pouvez utiliser la bibliothèque stetho facebook http://facebook.github.io/stetho/ –

Répondre

3

Peut-il aider quelqu'un ...

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

Ajouter à la fois pour voir les journaux complets et ajoutez intercepteur au dernier (ne sais pas pourquoi mais son comme celui-ci).

+2

Vous n'avez pas besoin d'ajouter les deux et il est fondamentalement inutile. La définition de 'BODY' devrait seulement montrer tous les journaux des en-têtes et des corps. https://github.com/square/okhttp/blob/master/okhttp-logging-interceptor/src/main/java/okhttp3/logging/HttpLoggingInterceptor.java#L132 – oldergod

+0

@oldergod: Oui, je suis d'accord avec vous mais ce qu'il était en 2016. :) –

1

Au lieu d'utiliser addInterceptor d'ajouter l'intercepteur d'enregistrement, utilisez addNetworkInterceptor, pour inclure les en-têtes ajoutés par OkHttp.

Network interceptors peuvent:

Observer les données comme il sera transmis sur le réseau.

+0

Merci de partager cela. –

+0

Même après cela, je ne suis pas en mesure de voir mon en-tête personnalisé ajouté à la demande –

3

Oh, je trouve l'erreur si quelqu'un est intéressé:

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(); 

Vous devez ajouter l'intercepteur journal (votre variable intercepteurs) après l'intercepteur de demande, de sorte que la bonne réponse est la suivante:

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

A travaillé pour moi, merci! – DH28

+0

Bonne prise, merci –