2016-08-16 11 views
0

を送信していない私のOkHttp3クライアント、クッキーと迎撃宣言です:はOkHttp3がここにクッキー

CookieJar cookieJar = new CookieJar() { 
     private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>(); 

     @Override 
     public void saveFromResponse(HttpUrl url, List<Cookie> cookies) { 
      //System.out.println("added new cookies: "+cookies); 
      cookieStore.put(url.host(), cookies); 
      //System.out.println("list of all cookies: "+cookieStore); 
     } 

     @Override 
     public List<Cookie> loadForRequest(HttpUrl url) { 
      List<Cookie> cookies = cookieStore.get(url.host()); 
      System.out.println(); 
      return cookies != null ? cookies : new ArrayList<Cookie>(); 
     } 
    }; 
    HttpLoggingInterceptor logging = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.HEADERS); 

    private OkHttpClient sisgradRequest = new OkHttpClient.Builder() 
      .cookieJar(cookieJar) 
      .addNetworkInterceptor(new UserAgentInterceptor(userAgent)) 
      .addInterceptor(logging) 
      .build(); 

それがクラス内にあります。

2016年8月16日8時20分22秒PM okhttp3.internal:ログ情報で

Request fakeUserNavigation = new Request.Builder(). 
       url(protocol + "://" + domain + "/" + "sentinela" + "/"). 
       build(); 
     Response a = sisgradRequest.newCall(fakeUserNavigation).execute(); 

、私はこれを見ることができます:メソッドの多くは、方法は、例えば、sisgradRequestと呼ばれるこのOkHttpClientから呼び出しを実行します。プラットフォームログ

INFO: Set-Cookie: JSESSIONID=E793...31C2.sis_sentinela_worker_6; Path=/sentinela/; Secure; HttpOnly 

したがって、この最初の呼び出しでクッキーが配信されています。

Request fakeUserNavigation2 = new Request.Builder(). 
       url(protocol + "://" + domain + "/" + "sentinela" + "/" + "login.open.action"). 
       build(); 

     Response b = sisgradRequest.newCall(fakeUserNavigation2).execute(); 

をが、GETリクエストは次のように記録されます:その後、私はこのように、別の電話をかけることがENDのGETを持っているので

INFO: --> GET https://.../sentinela/login.open.action http/1.1 
Aug 16, 2016 8:20:22 PM okhttp3.internal.platform.Platform log 
INFO: --> END GET 

これは、全体の要求です。クッキーは送信されていません。すべてのメソッド呼び出しは同じOkHttp3Clientを使用しているので、クッキーはそれらの間で共有されるべきです。私はhereからクッキージャーの3つの実装をすべて試しましたが、どれも動作しません。これは私のコードでは、最後の答えからです。

+0

私は同じ問題があります。あなたはこれを解決することができましたか? – Tooroop

答えて

0

サーバーからの応答がCookieを更新しようとしていないため、既存のCookieを空のListに置き換えているようです。しかし、デバッグ用のprintlnsを少し微調整すればそのことを確認する必要があります。

なぜリストが空でない場合でも、saveFromResponseのクッキーを置き換えるだけではありませんか?

@Override 
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) { 
    System.out.println("received cookies from server: " + cookies); 

    if (cookies.size() > 0) { 
     cookieStore.put(url.host(), cookies); 
    } 
} 
関連する問題