Как перестать замечать ограниченность траффика у бесплатных WiFi

в 17:18, , рубрики: html, бесплатный WiFi, метки:

Добрый день, уважаемые читатели!
Этот пост, совмещенный с вопросом, посвящен попытке сделать работу с бесплатными 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-запрос без формы?

Автор: gous32

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js