2016-08-16 1 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(); 

Это находится внутри класса. Множество способов выполнить вызовы методов из этого OkHttpClient называется sisgradRequest, например:

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

В информации лесозаготовительной, я вижу это:

16 августа 2016 8:20:22 PM okhttp3.internal. platform.Platform log

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 регистрируется как это:

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 

Это весь запрос, потому что он имеет END GET. Печенье не отправляется. Все вызовы метода используют один и тот же OkHttp3Client, поэтому куки должны быть разделены между ними. Я пробовал все 3 реализации куков cookie от here, но никто из них не работает. Это в моем коде из последнего ответа.

+0

У меня такая же проблема. Вам удалось решить эту проблему? – Tooroop

ответ

0

Похоже, что ответ, который вы получаете с сервера, не пытается обновлять файлы cookie, и вы можете заменить существующие файлы cookie пустым списком. Но небольшие корректировки ваших отладочных printlns должны подтвердить это.

Почему бы не заменить файлы cookie в файле 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); 
    } 
}