Вот сайт http://sd.366.ru/ . Как такое парсить? Подскажите на чем это написано и в какую сторону смотреть. К тому же вход по логину.
Я так понимаю такая штука имеет собственное api , ответы на запросы и надо парсить, только как мне узнать какие запросы мне делать.
UPD Следуя вашим подсказкам я пришел к тому, что используя Jsoup смог авторизоваться на http://my.id-soft.ru (это такой же софт работающий на сервере как и Интрасервис).
public static void main(String[] ars) throws IOException {
String userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36";
// Получаю токен
Connection.Response resp1 = Jsoup.connect("http://my.id-soft.ru/auth/login").method(Connection.Method.GET).execute();
String token = resp1.parse().getElementsByTag("input").first().val().trim();
System.out.println(token);
// Упаковываю все в пост и отправляю
Connection.Response resp2 = Jsoup.connect("http://my.id-soft.ru/auth/login").referrer("http://my.id-soft.ru/auth/login").userAgent(userAgent)
.data("_token", token, "login","Mylogin", "password", "qwerty").cookies(resp1.cookies())
.method(Connection.Method.POST).timeout(10000).execute();
Map<String, String> cookies = resp2.cookies();
Document doc = resp2.parse();
Теперь мне не ясно вот что: При каждом ли новом запросе я должен отправлять токен, пароль, логин? Или могу только куки дальше использовать. Или токен? Немного запутался в том как правильно строить следующий запрос. Но это ладно, основное что мне нужно это понять как в таких приложениях находящихся на стороне сервера нажимать на кнопки. Вот у меня имеются фильтр. Я хочу обновить с учетом нажатого фильтра. Включаю Fiddler жму кнопку фильтра и уже идет запрос. Только ради того чтобы показать мне поле выбора фильтра. Ну ладно, оно подгружается. Запрос такой.
POST http://my.id-soft.ru/tickets/getPopupFilterData HTTP/1.1
Host: my.id-soft.ru
Connection: keep-alive
Content-Length: 12
Accept: */*
Origin: http://my.id-soft.ru
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://my.id-soft.ru/tickets
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: laravel_session=eyJpdiI6IlBIMFUxNG5NQVкукикуки
field=status
Как я вижу новое здесь только field=status
После того как я выбираю один из статусов вижу отправляется такой запрос:
POST http://my.id-soft.ru/tickets/popupFilterDo HTTP/1.1
Host: my.id-soft.ru
Connection: keep-alive
Content-Length: 8
Accept: */*
Origin: http://my.id-soft.ru
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://my.id-soft.ru/tickets
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: laravel_session=eyJpdiI6Ill2WVRUbFVLd1lXeXpxQlVкукикуки
status=2
Новое тут только status=2
Ну и дальше после выбора фильтр сам срабатывает. Так вот вопрос, обязательно ли сперва мне надо сделать запрос с field=status
, а потом с status=2
или сразу последний запрос? Если бы это был сайт меня бы интересовал конечный результат, тут это может не прокатить. Конечно не проблема поэкспериментировать, но что-то у меня не получается в запрос добавить этот статус. Я бы приложил ответ парсера при авторизации, но он огромен. Хотя нужная часть может есть в этом
<ul class="tabs_content">
<li name="tabs11" class="tabs_content_active">
<div id="filterStatusContainer" style="display: none;">
<input type="button" id="filterStatusCancel" value="" onClick="location.href='http://my.id-soft.ru/tickets/clearFilter'" style="margin-right: 5px;">
<input type="checkbox" id="filterStatusCheckbox" onClick="changeFilterStatus($(this))" style="display: none;">
<span> </span>
<input type="button" id="filterStatusProperties" value="Настроить" style="display: none;">
</div>
<div id="scroll_table35" class="scrollTable" style="border-top: 1px solid #a9a9a9; background-color: #fafafa;">
<div class="content">
<table border="0" cellspacing="0" cellpadding="0" class="sort_table_header">
<tbody>
<tr class="top_tr_border">
<th name="col00" width="74">№<input type="button" class="tableFilterBtn" name="tableFilterId" value=""></th>
<th name="col05" width="130">Приоритет<input type="button" class="tableFilterBtn" name="priority" value=""></th>
<th name="col02" width="126">Дата создания<input type="button" class="tableFilterBtn" name="tableFilterDateCreate" value=""></th>
<th name="col04" width="586">Адрес размещения<input type="button" class="tableFilterBtn" name="tableFilterLocName" value=""></th>
<th name="col03" width="98">Код 1С<input type="button" class="tableFilterBtn" name="tableFilterLocId" value=""></th>
<th name="col02" width="600">Тема<input type="button" class="tableFilterBtn" name="tableFilterSubjectName" value=""></th>
<th name="col03" width="150">Статус<input type="button" class="tableFilterBtn" name="status" value=""></th>
<th name="col04" width="300">Рабочая группа<input type="button" class="tableFilterBtn" name="tableFilterWrkGrpName" value=""></th>
<th name="col04" width="200">Исполнитель<input type="button" class="tableFilterBtn" name="tableFilterSpecialist" value=""></th>
<th name="col06" width="130">Срок<input type="button" class="tableFilterBtnOrderDesc orderBtn" name="date_target" value=""></th>
</tr>
</tbody>
</table>
<div id="scroll_table" class="scrollTable">
<div class="content">
<table border="0" cellspacing="0" cellpadding="0" class="sort_table_body">
<tbody>
<tr class="" priority="5" name="946560" specialist="93791" status="2" subject="562" initiator="64507" location="4422" workgroup="82" onclick="get_ticket_data($(this));" ondblclick="get_ticket_data_dblclick($(this));">
Как видите есть такая строчка
<th name="col03" width="150">Статус<input type="button" class="tableFilterBtn" name="status" value=""></th>
В которую я никак не могу value="2" влепить. Ну вопросы в том как правильно выставлять фильтр и вообще нажимать на кнопки, достаточно ли отправить запрос или придется использовать Силениум (что такое не знаю, понял что помогает на кнопки нажимать). Ну и помогите выставить фильтр, если это возможно через запрос без всяких Силениум.
И кстати сам я пробовал добавить data("status","2")
в запрос, но ответ не похож на реальный.
Есть шейдер, который устанавливает цвет полигона - треугольника, но я хочу чтобы вместо цвета была текстура, получается мне нужно вместо выходного...
Посоветуйте как можно сделать тест в андроид приложении, в котором можно выбрать один ответ из 4(допустим) и в итоге выводить заключение (вывод)...
Является ли данный пример, плохим стилем написания кода? Лучше ли использовать другие имена переменных в конструкторе?
Всем привет, все работало отлично в Android Studio на Linux, как вдруг я решил залезть в VM Options и вбил куда-то в studio64vmoptions строчку с настройкой