как обрабатывать куки для запросов okhttpclient - PullRequest
0 голосов
/ 20 февраля 2020

Я отправляю запрос на URL веб-страницы веб-сайта, используя OkHttpClient и сохраняю повар ie, который он дает следующим способом, который я получил только из stackoverflow.

CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
ClearableCookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(this));
OkHttpClient client = new OkHttpClient.Builder()
                .cookieJar(cookieJar)
                .build();
Request request = new Request.Builder()
                .url("www.example.com/homePage")
                .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0")
                .build();

Необходимо хранить повара ie, в противном случае веб-сайт перенаправляет запрос на страницу тайм-аута.

Затем я вижу html страницы, чтобы проверить, достиг ли я правильного URL.

client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
                textView.setText("Failed to get response");
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if(response.isSuccessful()){
                    //String myResponse contains the html of the webpage 
                    final String myResponse = response.body().string();
                    MainActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(myResponse);
                        }
                    });
                }
            }
        });

Теперь я создаю другую переменную Request аналогично URL "www.example.com/loginPage" и пытаюсь увидеть html, но это перенаправляет меня на страницу тайм-аута, потому что запрос сделан без отправки повара ie, который я получил от homePage.

Итак, вкратце, как я могу получить повара ie из "www.example.com/cookieProviderPage" и сохранить его, а затем использовать этот повар ie для всех дальнейших запросов ко всем страницам этого веб-сайта. Страницы этого веб-сайта имеют разные URL-адреса, такие как "www.example.com/cookieRequiredPage1", "www.example.com/cookieRequiredPage2" и т. Д. c.

PS. Я проверил много вопросов о стековом потоке, связанных с файлами cookie, но не могу их реализовать специально в моем случае.

1 Ответ

0 голосов
/ 21 февраля 2020

Файлы cookie, добавленные с помощью команды

new OkHttpClient.Builder()
  .cookieJar(cookieJar)

, загружаются в зависимости от метода CookieJar.loadForRequest. Вы должны проверить, как ваша реализация интерфейса CookieJar реализовала метод loadForRequest. Если cookie-файлы загружаются точно по тому же URL-адресу, откуда исходят cookie-файлы, у вас есть ошибка. Если файлы cookie приходят от "www.example.com/cookieProviderPage" и вы хотите предоставить файлы cookie для запроса "www.example.com/loginPage", ваша реализация CookieJar может предоставлять файлы cookie только для запросов с URL-адресом "www.example.com/cookieProviderPage". Это, например, случай, если для получения файлов cookie для запроса используется Cookie.matches. Cookie.matches сравнивает доменное имя и путь URL.

...