Здравствуйте! Подскажите пожалуйста как быть? В http совсем не силён! Задача стоит так. Есть 3g wi-fi модем huawei e355, который нужно удаленно ребутить хотя бы раз в сутки.
Идея в следующем. У роутера есть админка, которая находится по адресу 192.168.1.1. В этой админке есть кнопка "Перезагрузить". Так вот события, возникающие по нажатию кнопки обрабатываются javascript, который в свою очередь производит не что иное, как POST запрос на сервер. Программы типа firebug, fiddler, http analyzer говорят, что в момент перед перезагрузкой модема из браузера происходит обращение по URL http://192.168.1.1/api/device/control. При этом ответ сервера <?xml version="1.0" encoding="UTF-8"?><response>OK</response>. Если скопировать данный URL и перейти по нему в браузере, либо же нажать Reply (т.е. попытаться его повторить) в программе fiddler, то в качестве ответа получим ошибку с кодом 100002.
После недолгих размышлений и одного эксперимента стало ясно, что скорее всего не хватает логина и пароля, т.к. попытка выполнить перезагрузку (т.е. тот самый javascript) после нажатии кнопки "log out" в интерфейсе модема приводит к тому, что сервер возвращает точно ту же ошибку 100002 и перезагрузка не происходит.
Тем не менее http analyzer пишет, что post data содержит лишь это - "1.0" encoding="UTF-8"?><request><Control>1</Control></request>.Помогите разобраться пожалуйста как правильно сформировать http запрос, чтобы можно было программно имитировать его!!! (Целевой ЯП - Java под Anroid, но это я уже сам разберусь).
Спасибо!
Никаких секретов
1. Авторизоваться
2. получить куки
3. в нужный запрос эти куки вложить.
В фидлере в формате raw data можно все это увидеть.
> Здравствуйте!Приветствую.
>Подскажите пожалуйста как быть?
Прочитав написанное вами, рекомендую забить.
> В http совсем не силён!
Заметно.
> Задача стоит так. Есть 3g wi-fi модем huawei e355, который нужно удаленно ребутить
> хотя бы раз в сутки.Задача ясна.
> Идея в следующем. У роутера есть админка, которая находится по адресу 192.168.1.1.
> В этой админке есть кнопка "Перезагрузить". Так вот события, возникающие по
> нажатию кнопки обрабатываются javascript, который в свою очередь производит не что
> иное, как POST запрос на сервер.Сложно из "пустого" браузера сделать что-то иное, чем одну из вариаций HTTP-запроса.
> Программы типа firebug, fiddler, http analyzer говорят, что в момент перед
> перезагрузкой модема из браузера происходит
> обращение по URL http://192.168.1.1/api/device/control.Возможно, только вы плохо воспользовались указанными программами.
> При этом ответ сервера <?xml version="1.0" encoding="UTF-8"?><response>OK</response>.
> Если скопировать данный URL и перейти по нему в браузере,Немудрено, ведь идет запрос GET.
> либо же нажать Reply
Где вы нашли в браузере кнопку Reply?
> (т.е. попытаться его повторить) в программе fiddler,
Вы всё еще уверены, что ваша попытка "повторить" - успешна?
>то в качестве ответа получим ошибку с кодом 100002.
Это говорит, что как-то не особо успешна.
> После недолгих размышлений и одного эксперимента стало ясно, что скорее всего не
> хватает логина и пароля, т.к. попытка выполнить перезагрузку (т.е. тот самый
> javascript) после нажатии кнопки "log out" в интерфейсе модема приводит к
> тому, что сервер возвращает точно ту же ошибку 100002 и перезагрузка
> не происходит.Шедевр логики.
> Тем не менее http analyzer пишет, что post data содержит лишь это
> - "1.0" encoding="UTF-8"?><request><Control>1</Control></request>.Вы не умеете пользоваться HTTP-Analyzer. Запрос - это не только "post data".
> Помогите разобраться пожалуйста как правильно сформировать http запрос,
> чтобы можно было программно имитировать его!!!:-)
> (Целевой ЯП - Java под Anroid, но это я уже сам разберусь).
Точно так же как разобрались с HTTP ? :-))
> Спасибо!
> Прочитав написанное вами, рекомендую забить.Вам не очевидно, что если человек тратит достаточное количество времени на решение этой проблемы, то забить нельзя?
> Возможно, только вы плохо воспользовались указанными программами.И в чём же моя ошибка, куда копать то хотя бы?
> Где вы нашли в браузере кнопку Reply?
Речь шла про фидлер, причём здесь браузер?
> Вы всё еще уверены, что ваша попытка "повторить" - успешна?
> Это говорит, что как-то не особо успешна.По-вашему я этого не понял?
> Вы не умеете пользоваться HTTP-Analyzer. Запрос - это не только "post data".
Я скачал эту программу за три часа до своей просьбы о помощи, т.к. время ГОРИТ (ну или другое место, если вам это понравится услышать)
А что ещё, если не только "post data"?
> :-)Правильно ли я понимаю, что вместо того, чтобы помочь нуждающемуся в этом человеку, вы решили за счёт него самоутвердиться?
> Точно так же как разобрались с HTTP ? :-))
У меня были всего сутки для этого, а задачу решить надо до понедельника.
Вообще какой смысл вашего поста? Показать своё превосходство? А зачем это делать на форуме, неужели всё так плохо в оффлайн-жизни у вас?
>> Прочитав написанное вами, рекомендую забить.
> Вам не очевидно, что если человек тратит достаточное количество времени на решение
> этой проблемы, то забить нельзя?ну как-то не видно, что потрачено _достаточное_ количество времени.
По прогрессу достижения цели видно, что успеха в заданные сроки не достигнуть.
В этих условиях разумно не тратить силы/нервы впустую.>> Возможно, только вы плохо воспользовались указанными программами.
> И в чём же моя ошибка, куда копать то хотя бы?
> А что ещё, если не только "post data"?Даже в файрбаге есть кнопка "Заголовки". Если вы её не заметили, сколько же это - "достаточное количество времени"?
> Я скачал эту программу за три часа до своей просьбы о помощи,
ААА, три часа... ну да, "достаточное количество времени".
> т.к. время ГОРИТ (ну или другое место, если вам это понравится
> услышать)Прекратите истерить и попробуйте включить рациональное мышление.
> У меня были всего сутки для этого, а задачу решить надо до
> понедельника.... если вы этого не сделаете, то у вас всегда и всё будет гореть и далее.
Вдруг там авторизация не по кукам... придется новую тему на форуме открывать...Мне вообще не понятно, зачем вы беретесь _в ограниченные сроки_ делать то,
о чем ничего не знаете? Не знаете, как работает HTTP, не знаете Java под Android.
Не то, что не знаете, но и просто должного представления не имеете.Собираетесь "имитировать HTTP-запрос" - мне очень интересно, как это.
Для решения задачи я бы имитировал _нажатие на кнопку_ в админке, но имитировать HTTP-запрос конечно намного интереснее, да.Вы кондитер по профессии, я угадал?
>> Я скачал эту программу за три часа до своей просьбы о помощи,
> ААА, три часа... ну да, "достаточное количество времени".Речь шла про http-analyzer, неужели вы полагаете, что всё время тратилось только на неё?
> Мне вообще не понятно, зачем вы беретесь _в ограниченные сроки_ делать то,
> о чем ничего не знаете? Не знаете, как работает HTTP, не знаете
> Java под Android.
> Не то, что не знаете, но и просто должного представления не имеете.Почему это должно вас волновать?
Если у вас недостаточно знаний либо нет желания помочь, то зачем вы всё это пишете и тратите своё время? Ваше время настолько дешёвое, что вы можете себе это позволить?
Прекратим этот бессмысленный диалог. Вот здесь скриншоты из программы http analyzer
(ссылка на мой dropbox)
https://dl.dropboxusercontent.com/u/65360035/screen.zip
Если вы действительно тот за кого себя выдаёте, то, увидев это, вам не составит труда указать как исправить положение, а если нет ни знаний, ни желания помочь, то впредь попрошу воздержаться от бесполезных ответов в этой теме. Спасибо!
> Прекратим этот бессмысленный диалог. Вот здесь скриншоты из программы http analyzer
> (ссылка на мой dropbox)
> https://dl.dropboxusercontent.com/u/65360035/screen.zip
> Если вы действительно тот за кого себя выдаёте, то, увидев это, вам
> не составит труда указать как исправить положение, а если нет ни
> знаний, ни желания помочь, то впредь попрошу воздержаться от бесполезных ответов
> в этой теме. Спасибо!https://dl.dropboxusercontent.com/u/65360035/screen.zip - 404.
Успехов.
> Успехов.
Ссылка поправлена. Уже уходите?))
>> Успехов.
> Ссылка поправлена. Уже уходите?))Заголовок "Cookie: _authorized=admin" пробовали подставить?
Рекомендую эти заголовки тоже выставить, гении могли додуматься сделать и их проверки:
X-Requested-With: XMLHttpRequest
Referer: http://192.168.1.1/html/reboot.html
>>> Успехов.
>> Ссылка поправлена. Уже уходите?))
> Заголовок "Cookie: _authorized=admin" пробовали подставить?
> Рекомендую эти заголовки тоже выставить, гении могли додуматься сделать и их проверки:
> X-Requested-With: XMLHttpRequest
> Referer: http://192.168.1.1/html/reboot.htmlНе помогло. Для отправки запроса использовал Advanced Rest Client (расширение для хрома)
Указал тип POST, добавил все заголовки в том числе указанные выше, отправил, но получил ошибку 100003Примечательно ещё и то, что если просто вставить строку в браузер, то ошибка 100002, а если отослать запрос через расширение хрома, то ошибка 100003. Понятно, что при отправке из строки браузера запрос GET, об этом ли говорит ошибка 100002? Если да, то о чём говорит ошибка 100003?
> Заголовок "Cookie: _authorized=admin" пробовали подставить?
> Рекомендую эти заголовки тоже выставить, гении могли додуматься сделать и их проверки:
> X-Requested-With: XMLHttpRequest
> Referer: http://192.168.1.1/html/reboot.htmlВновь при перезагрузке получил запрос в fiddler, роутер перезагрузился. Я снова подключился к нему, нажал Replay на запросе в fiddler и он вернул ошибку. Почему? Потому что я не умею пользоваться программой?:D
Но суть не в этом. После этого я зашёл в админку, залогинился, а затем вернулся в fiddler и нажал Replay на запросе и роутер перезагрузился. Как это понимать? Я никогда не трогал эту область не смотря на то, что писал под андроид с использованием NDK и OpenGL ES, кстати..
И кондитер тоже профессия! Все профессии нужны, все профессии важны!
>> Заголовок "Cookie: _authorized=admin" пробовали подставить?
>> Рекомендую эти заголовки тоже выставить, гении могли додуматься сделать и их проверки:
>> X-Requested-With: XMLHttpRequest
>> Referer: http://192.168.1.1/html/reboot.html
> Вновь при перезагрузке получил запрос в fiddler, роутер перезагрузился. Я снова подключился
> к нему, нажал Replay на запросе в fiddler и он вернул
> ошибку. Почему? Потому что я не умею пользоваться программой?:D
> Но суть не в этом. После этого я зашёл в админку, залогинился,
> а затем вернулся в fiddler и нажал Replay на запросе и
> роутер перезагрузился. Как это понимать?Насколько я понял, из ответа первого запроса не надо передавать никаких параметров во второй, нужно тупо сделать два последовательных фиксированных запроса, один за другим - запрос на авторизации потом запрос на перезагрузку.
Первый запрос взведет внутри роутера флаг "авторизовались", второй просто выполнится.
>[оверквотинг удален]
>> Вновь при перезагрузке получил запрос в fiddler, роутер перезагрузился. Я снова подключился
>> к нему, нажал Replay на запросе в fiddler и он вернул
>> ошибку. Почему? Потому что я не умею пользоваться программой?:D
>> Но суть не в этом. После этого я зашёл в админку, залогинился,
>> а затем вернулся в fiddler и нажал Replay на запросе и
>> роутер перезагрузился. Как это понимать?
> Насколько я понял, из ответа первого запроса не надо передавать никаких параметров
> во второй, нужно тупо сделать два последовательных фиксированных запроса, один за
> другим - запрос на авторизации потом запрос на перезагрузку.
> Первый запрос взведет внутри роутера флаг "авторизовались", второй просто выполнится.Вооо... Вот о флаге в роутере я не подумал.. Потому что меня мучил вопрос почему если я из фиддлера делаю запрос на авторизацию, а потом делаю запрос на перезагрузку, то он перезагружается так же как если бы я логинился в админке, а потом делал запрос на перезагрузку из фиддлера. Я думал роутер что-то куда-то специфическое возвращает, что потом используется в запросе на перезагрузку, чего я в упор не вижу, анализируя запрос в том же фиддлере.
Не успел пока всё это на андроиде проверить, это в фиддлере тыкнул Replay и всё, а там же формировать запрос надо руками..
Спасибо! Всё получилось. 3g wi-fi modem huawei e355 с андроид устройства путем POST запроса перезагружен!Если не вдаваться в подробности того, что http запрос не выполняется из основного потока (если кто не знающий этого, будет читать форум), а так же опустить блоки try/catch, то код авторизации выглядит примерно так:
public void makeSecondHttpPOSTRequest() {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://192.168.1.1/api/user/login");String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><Username>admin</Username><Password>eW04NWoyNzZm</Password></request>";
InputStream inputStream = new ByteArrayInputStream(xmlString.getBytes());//init your own inputstream
InputStreamEntity inputStreamEntity = new InputStreamEntity(inputStream, xmlString.getBytes().length);
httppost.setEntity(inputStreamEntity);
HttpResponse response = httpclient.execute(httppost);
}Никакие заголовки задавать при этом не требуется. (по крайней мере для e355)
Однако стоит заметить, что пароль здесь передаётся совсем не тот, который бы я вводил в форму логина. Я ещё не посмотрел, но похоже там какой-то javascript этот самый пароль кодирует. Догадываюсь конечно как, но надо уточнить..Далее запрос на перезагрузку. Код выглядит так же за исключением того, что URL меняется на
"http://192.168.1.1/api/device/control", а xml тело запроса на
String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><Control>1</Control></request>";Собственно на этом всё. Если кому вдруг это будет нужно, но не понятно, стучите в skype: skyline0034