2016-06-30 4 views
4

私はOkHttp 3(retrofit2)を使用しています。クッキーとロギングの両方を動作させようとしています。問題は、ログにCookie以外のすべてが表示されることです。私はHTTPトラフィックをキャプチャして、クッキーが送信されている、彼らはちょうど記録されていません。私はログインターセプタをデバッグしようとしましたが、実際には、intercept()コールに達すると、リクエストにはクッキーがないように見えます(他のカスタムヘッダーがあります)。私は間違って何をしていますか?OkHttp3 logging interceptorがクッキーをログに記録しない

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

出力例:

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

答えて

5

ログインターセプタは、クッキーが要求に追加されている前に実行されます。これを回避するには、アプリケーションインターセプタの代わりにネットワークインターセプタを使用します。その他のガイダンスはこちら:

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

関連する問題