Этот пост, совмещенный с вопросом, посвящен попытке сделать работу с бесплатными WiFi удобной.
Пост написан про определенную сеть, но при простом допиле сгодится почти для всех. Во избежание проклятий скажу, что в JS не смыслю почти ничего.
Предыстория
Как вы знаете, сейчас очень распространен в кофейнях, ТЦ и т.п. бесплатный вайфай. У большинства из них схожие методы работы, но тут я буду говорить про одно конкретное место. Там работа идет внутри сессии размером 30 минут и ~50МБ. Если активной сессии нет, то любая попытка загрузить внешний сайт автоматически редиректится на страницу регистрации сессии (…/status.php). На ней кнопка «Продолжить работу в интернет», переводящая, в свою очередь, на www.@CompanyName@.ru. Более того, редирект на эту страницу автоматически идет через 10 секунд после загрузки.
В итоге без дополнительного шаманства загрузить средствами браузера файл >30МБ — большая удача, >50МБ в принципе невозможно. Плюс порой сессия обрывается в процессе написания текста, а последующий редирект вынуждает переписывать текст заново, что порой крайне бесит.
Проблема решалась написанием простенького локального html-файла, перезагружающегося раз в 10 секунд и пытающегося в iframe загрузить что-нибудь извне.
<BODY> <META HTTP-EQUIV="Refresh" Content="15"> <IFRAME src="http://www.ya.ru" width=1024 height=768 scrolling="auto" frameborder="0" id="ifram">_</IFRAME> </BODY>
В результате по окончании сессии новая регистрировалась в течение 10 секунд, количество ложных редиректов упало почти до нуля, а отличия бесплатного интернета от домашнего свелись лишь к блокировке торрентов.
И всё бы было ничего, если бы в один прекрасный день провайдер не изменил правила регистрации сессии. Раньше сессия регистрировалась при любой загрузке http:://…/status.php. Теперь же на этой странице появилась форма с чекбоксом и словами о совершеннолетии. При отжатом чекбоксе вместо желтой кнопки мы получали серую некликабельную картинку, при нажатом кнопка возвращалась. Старый файл, естественно, не работал, регистрация теперь проходит при нажатии на кнопку.
<form action="https://.../status" method="POST" name="non_reg"> <input type=hidden name=lang value='ru'> <input type=hidden name=screen value='normal'> <input type="hidden" name=url value=''> <input type="hidden" name="mode" value="partner"> <script> //здесь функции для обработки checkbox'а. Скрывает btncontinue_g и показывает btncontinue или наоборот. </script> <p><input type="checkbox" onclick="checkSubmitBtn(this.checked)">Мне уже исполнилось 18 лет</p> <img id="btncontinue_g" src="/i/v6/b_continue_g_r.gif" alt="Продолжить работу в Интернет"/> <input id="btncontinue" style="display:none" type=image src="/i/v6/b_continue_r.gif" alt="Продолжить работу в Интернет"/> </form>
Посмотрев код да понажимав кнопку я узнал три новости. Хорошая — для регистрации нужно всего лишь законфирмить форму, которая при этом не передает значение чекбокса. Плохая — method=«POST», значит, простой запрос ../status.php?mode=partner… не прокактит. И забавная — после нажатия на кнопку происходят аж три редиректа, от двух из которых можно было бы и избавиться.
Ну и, соответственно, решение: делаем такую же форму с таргетом в фрейм и при загрузке страницы говорим confirm(). На это, правда, у меня ушел час, плюс в какое-то время мне нужны были два файла, но в итоге получилось
<HEAD> <script> function refreshIFrame() { document.getElementById("olol").submit(); } </script> <TITLE>Refreshing</TITLE> </HEAD> <BODY onload="{refreshIFrame();}"> <META HTTP-EQUIV="Refresh" Content="15"> text<br> <IFRAME name="ifra" src="" width=100 height=100 scrolling="auto" frameborder="0" id="ifram" onLoad="">а—аДаЕб?б? аОаБаНаОаВаЛаЕаНаИаЕ </IFRAME><br>б…б?аЙ<br> <FORM id="olol" NAME="s" METHOD="post" ACTION="https://startwifi.beeline.ru/status" target="ifra"> <input name="lang" value="ru" type="hidden"> <input name="screen" value="normal" type="hidden"> <input name="url" value="" type="hidden"> <input name="mode" value="partner" type="hidden"> </FORM> </BODY>
И — вуаля! — всё вновь заработало.
Ну и вопрос — можно ли послать серверу POST-запрос без формы?
ссылка на оригинал статьи http://habrahabr.ru/post/181854/
Добавить комментарий