Проблемы со входом на веб-страницу с использованием java и jaunt-api
Поэтому я пытаюсь зайти на веб-страницу с помощью Jaunt. Первое, что нужно упомянуть, это то, что веб-страница имеет формат.aspx, а кнопка отправки имеет возможность onclick="javascript:WebForm_DoP..."
и насколько я знаю, Jaunt не поддерживает Javascript, верно? На случай, если я ошибаюсь, код, который я использую, приведен в примерах Jaunt:
Form form = userAgent.doc.getForm(0);
form.setTextField("Login1$UserName","USER");
form.setPassword("Login1$Password","PASSWORD");
form.setCheckBox("Login1$RememberMe",false);
form.submit("GO");
System.out.println(userAgent.getLocation());
Все имена и значения верны, а пользователь и пароль работают, поскольку я могу войти в систему с помощью веб-браузера. После того, как я выполню код, в выводе я получаю это:
сообщение: UserAgent.sendPOST; Ошибка соединения requestUrl: http://webpagehere.com/default.aspx [размещение __VIEWSTATE=%2FwEPDwUJLTk5MDc0NjQ2ZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAgURTG9naW4xJFJlbWVtYmVyTWUFF0xvZ2luMSRMb2dpbkltYWdlQnV0dG9upWcarODJIwpeMt8HCmfaBn6iMWI%3D&__VIEWSTATEGENERATOR=CA0B0334& Имя_входа1%24UserName=USER& Имя_входа1%24Password= ПАРОЛЬ & Имя_входа1%24LoginButton=GO] Ответ: [ни]
Форма div такая:
<form name="form1" method="post" action="Default.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="form1" style="text-align:center">
Есть идеи, в чем может быть моя проблема? Если Jaunt не позволяет мне войти в систему, может кто-нибудь порекомендовать мне библиотеку для проверки и взаимодействия в Интернете? Спасибо!
1 ответ
Похоже, вы застряли. На самом деле. ASPX-страницы используют нумерацию страниц AJAX. Вам нужно будет извлечь значения __VIEWSTATE, __VIEWSTATEGENERATOR и всех других значений формы, а затем отправить их методом POST в теле запроса. Вы можете использовать Fiddler, чтобы получить тело запроса, которое содержит все эти скрытые переменные и ваши записи в форме.
В Java вы можете использовать Selenium или HTMLUnit, которые являются браузером Java GUI-Less, поддерживающим JavaScript, для запуска веб-страниц.
edit: Вы также можете использовать Jaunt-api, я только что попробовал с ним, все, что вы делаете, это отправляете POST-запрос вместе с телом запроса, вы можете легко проверить это с помощью Fiddler, и это работает!!
Значения форм в HTTP POST отправляются в теле запроса в том же формате, что и строка запроса. Вы можете найти тело запроса ссылки, проверив его с помощью Fiddler, а затем скопировать тело запроса из Textview и отправить закодированные данные в качестве тела запроса.
UserAgent userAgent = new UserAgent();
userAgent.sendPOST("<your link to form page>","<request body>");