Я пытаюсь создать приложение, которое вытягивает мой график работы из Интернета после его выпуска, поэтому мне не нужно каждый раз входить в систему, чтобы проверить его.Однако я натолкнулся на многочисленные проблемы на этом пути.Мне наконец-то удалось войти в систему с помощью JSoup, однако я должен открыть страницу расписания, чтобы увидеть фактическое расписание, и эта страница требует JavaScript для извлечения данных.
Я обнаружил правильный запрос XHR с помощью Chrome Dev Tools, однако, когдаЯ открываю его в Chrome, он возвращает 404, и когда я открываю его с помощью JSoup, он говорит, что не может обработать JSON, что я знаю.Однако я не знаю, как открыть его без JSoup.Я пытался использовать встроенные URL-адреса Java, но у меня возникли проблемы с переводом файлов cookie, чтобы он работал должным образом, и в результате получилось несколько случайных символов, которые, безусловно, не выводятся в консоль JSON.Я не могу использовать HtmlUnit, потому что я нахожусь на Android, и насколько я знаю, Selenedroid предназначен только для тестирования, или, если это не так, я не смог бы заставить его работать регулярно.
public void run() {
try {
System.out.println("LOG: STARTING:");
Connection.Response resp = Jsoup.connect([home login page])
.timeout(30000)
.userAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) " +
"AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 " +
"Mobile/13B143 Safari/601.1")
.method(Connection.Method.GET)
.execute();
System.out.println("LOG: CONNECTED:");
Document responseDocument = resp.parse();
FormElement form = (FormElement) responseDocument.select("form#frmLogin")
.first();
Element usernameElement = responseDocument.select("[name$=USER]").first();
Element passwordElement = responseDocument.select("[name$=password]").first();
usernameElement.val(username);
passwordElement.val(password);
System.out.println("LOG: UPDATED FIELDS:");
Connection.Response loginPageResponse = form.submit().method(Connection
.Method.POST)
.userAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) " +
"AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 " +
"Mobile/13B143 Safari/601.1")
.execute();
System.out.println("LOG: SUBMITTED FORM:");
String cookies = loginPageResponse.cookies().toString().substring(1, resp.cookies()
.toString().length() - 1).replace(",", ";");
/*
System.out.println("cookie " + cookies);
URL url = new URL([xhr request page I got from chrome dev tools]);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
con.setRequestProperty("Accept", "application/json");
con.setRequestProperty("Accept-Encoding", "gzip, deflare, br");
con.setRequestProperty("Accept-Language", "en-US,en;q=0.9");
con.setRequestProperty("Connection", "keep-alive");
con.setRequestProperty("Cookie", cookies);
con.setRequestProperty("Host", [host I got from chrome dev tools]);
con.setRequestProperty("Referer", [referer I got from chrome dev tools]);
con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; " +
"x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 " +
"Safari/537.36");
con.setRequestProperty("X-Requested-With", "XMLHttpRequest");
con.connect();
System.out.println(con.getURL());
System.out.println(con.getResponseMessage());
Scanner scanner = new Scanner(con.getInputStream());
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}*/
Connection.Response response = Jsoup.connect([xhr request page I got from chrome dev tools])
.header("Accept", "application/json")
.header("Accept-Encoding", "gzip, deflate, br")
.header("Accept-Language", "en-US,en;q=0.9")
.header("Connection", "keep-alive")
.header("Cookie", cookies)
.header("Host", [host I got from chrome dev tools])
.header("Referer", [referer I got from chrome dev tools])
.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1) " +
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 " +
"Safari/537.36")
.header("X-Requested-With", "XMLHttpRequest")
.execute();
Scanner scanner = new Scanner(response.url().openConnection().getInputStream());
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
System.out.println("LOG: END");
} catch (Exception e) {
e.printStackTrace();
}
}
Iожидайте, что вы либо откроете страницу расписания и правильно проанализируете HTML, либо вызовете JSON из запроса XHR и прочитаете его, чтобы вывести расписание.Вместо этого я не могу открыть ни один, потому что JSoup не принимает JSON