Этот вопрос в основном хочет знать, как использовать сохраненные куки для последующего запроса. Длинный текст ниже приведен только для примера. 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 ответа, чтобы проверить, достигла ли я правильной страницы.