2016-06-30 11 views
4

Ich benutze OkHttp 3 (mit Retrofit2) und ich versuche, beide Cookies und Protokollierung zu arbeiten. Das Problem ist das Protokoll zeigt alles, aber nicht die Cookies. Ich habe den HTTP-Verkehr erfasst und der Cookie wird gesendet, sie werden nur nicht protokolliert. Ich habe versucht, den Logging Interceptor zu debuggen, und tatsächlich scheint die Anfrage keine Cookies zu haben (obwohl es andere benutzerdefinierte Header hat), wenn sie den intercept() Aufruf erreicht. Irgendwelche Ideen was mache ich falsch?OKHttp3 Logging Interceptor protokolliert keine Cookies

final Gson gson = new GsonBuilder() 
      .setDateFormat(JSON_DATE_FORMAT) 
      .create(); 

    HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 
    logging.setLevel(HttpLoggingInterceptor.Level.BODY); 
    CookieManager cookieManager = new CookieManager(); 
    cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); 

    OkHttpClient.Builder okClientBuilder = new OkHttpClient.Builder() 
     .addInterceptor(new Interceptor() { 
      @Override 
      public Response intercept(Chain chain) throws IOException { 
       Request request = chain 
         .request() 
         .newBuilder() 
         .addHeader("custom-header", Utils.getRandomUUIDForHeader()) 
         .build(); 
       return chain.proceed(request); 
      } 
     }) 
     .cookieJar(new JavaNetCookieJar(cookieManager)) 
     .addInterceptor(logging); 

    if (mock) { 
     okClientBuilder.addInterceptor(new MockApiInterceptor(context)); 
    } 

    return new Retrofit 
      .Builder() 
      .baseUrl(serverURL) 
      .client(okClientBuilder.build()) 
      .addConverterFactory(ScalarsConverterFactory.create()) 
      .addConverterFactory(GsonConverterFactory.create(gson)) 
      .build() 
      .create(DefaultApi.class); 

Beispielausgabe:

<-- 200 OK http://localhost:53580/login (31ms) 
Content-Length: 66 
Set-Cookie: JSESSIONID=4b42fc452e6adc55334e65b945c24b8886b127a57786a6cd51de6b3117a58cc9; Path=/ 
OkHttp-Sent-Millis: 1467298601713 
OkHttp-Received-Millis: 1467298601718 

{ 
    "status":"OK", 
    "sessionId":"p8tvdIHxQaON", 
    "entities":[] 
} 
<-- END HTTP (66-byte body) 
--> GET http://localhost:53580/data http/1.1 
custom-header: 663d0354-8a16-471a-bf6d-fb7fdb3d3404 
--> END GET 

Antwort

5

Die Logging Interceptor läuft, bevor Cookies auf die Anfrage hinzugefügt wurden. Umgehen Sie das, indem Sie einen Netzwerk-Interceptor anstelle eines Anwendungs-Interceptors verwenden. Weitere Anleitung ist hier:

https://github.com/square/okhttp/wiki/Interceptors