Используйте сохраненный Cook ie в persistentcookiejar или каком-либо другом контейнере для запросов okhttp в android - PullRequest
0 голосов
/ 19 февраля 2020

Этот вопрос в основном хочет знать, как использовать сохраненные куки для последующего запроса. Длинный текст ниже приведен только для примера. Basi c Вопрос в том, как использовать одного и того же повара ie для всех запросов на определенном веб-сайте.

В основном я пытаюсь попасть на страницу входа на веб-сайт в пределах android приложение Сайт работает следующим образом.

Есть 3 URL для рассмотрения.

1 -> "http://www.example.com/timeoutPage"

2 -> " http://www.example.com/mainPage "

3 ->" http://www.example.com/loginPage "

Два основных момента, которые следует учитывать,

(1) Если мы напрямую go перейдем на 3-й URL (loginPage), он перенаправится на 1-й URL (timeoutPage). У timeoutPage есть кнопка для go на главной странице.

(2) Если мы go на 2-й URL (mainPage), это дает нам повара ie. Теперь, получив повар ie, когда мы заходим на 3-й URL (loginPage), мы можем получить к нему доступ. У loginPage есть капча, поэтому для ее входа необходимо посетить ее (loginPage).

Без повара ie, который выдается при посещении 2-го URL (mainPage), мы не можем получить прямой доступ 3-й URL (loginPage).

, поэтому я делаю ClearbleCookieJar и присоединяю к OkHttpClient.

OkHttpClient client;
ClearableCookieJar cookieJar;
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(this));
client = new OkHttpClient.Builder()
                .cookieJar(cookieJar)
                .build();
Request request = new Request.Builder()
                .url("http://www.example.com/mainPage")
                .build();

        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()){
                    final String myResponse = response.body().string();
                    MainActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(myResponse);
                        }
                    });
                }
            }
        });

Пока все хорошо, я могу напечатать html mainPage в моем текстовом виде. Проблема начинается здесь, когда я делаю другой запрос для loginPage.

request = new Request.Builder()
                .url("http://www.example.com/loginPage")
                .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0")
                .build();

        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()){
                    final String myResponse2 = response.body().string();
                    MainActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(myResponse2);
                        }
                    });
                }
            }
        });

Здесь я снова делаю запрос к loginPage, но я достигаю timeoutPage. Как мне сделать запрос на URL-адрес loginPage, чтобы мой запрос отправлял cook ie, который я сохранил в cookieJar при выполнении запроса к mainPage. Один из способов, о котором я думал, был

request = new Request.Builder()
                .url("http://www.example.com/loginPage")
                .addHeader("Cookie", cookieStringGivenAtMainPage)
                .build();

Но я не знаю, как получить доступ к этому cookieStringGivenAtMainPage. Как мне добраться до этой страницы входа?

Я печатаю html ответа, чтобы проверить, достигла ли я правильной страницы.

...