Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Русская версия" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Скрипты от SiteOFF.net 004
Информационный Канал Subscribe.Ru |
Вот ее код:
<form action=sms2 name="sendsms"
method="post">
<select
name="prefix">
<option
value="7926">7
926</option>
<option
value="7095">7
095</option>
</select>
<input
name="addr" type="text">
<input
name="mlength" value="(максимум 110
символов):">
<textarea name="message"
style="width:
100%;"></textarea>
<input
name="messlen" value="110">
<input
name="transliterate" type="checkbox"
checked>
<input name="send"
value="Отправить" type="submit">
<input
name="send_after_flag" value="on"
type="checkbox">
<select
name="send_hour">
<option
value="-1">--</option>
<option
value="0">00</option>
<option
value="1">01</option>
...
<option
value="23">23</option>
</select>
<select
name="send_minute">
<option
value="-1">--</option>
<option
value="0">00</option>
<option
value="1">01</option>
...
<option
value="59">59</option>
</select>
<select
name="send_day">
<option
value="-1">--</option>
<option
value="1">01</option>
<option
value="2">02</option>
...
<option
value="31">31</option>
</select>
<select
name="send_month">
<option
value="-1">--</option>
<option
value="1">Января</option>
<option
value="2">Февраля</option>
...
<option
value="12">Декабря</option>
</select>
<select
name="send_year">
<option
value="-1">----</option>
<option
value="2003">2003</option>
<option
value="2004">2004</option>
</select>
</form>
Анализ кода формы
Анализуруя тег <form>, находим, что при нажатии на кнопку "Отправить", форма посылает запрос скрипту "sms2", который находится там же, что и страница с формой, то есть абсолютный путь к этому скрипту будет такой: /misc/sms2, и, соответственно, url: http://www.megafonmoscow.ru/misc/sms2 (напоминаю, что сама форма отправки SMS находится здесь /misc/sms, url: http://www.megafonmoscow.ru/misc/sms, так как в action написано "sms2" без слешей и других символов, то файл sms2 находится там же, где и файл sms с формой для отправки)
Фома использует метод POST для отправки данных (method="post").
В форме присутствуют следующие поля (см исходный
код):
prefix - префикс номера. Так как это список
(<select>), то prefix может принимать только одно из
двух значений:7095 и 7926 (значения тегов
<option>).
addr - ваш телефонный номер (6
знаков).
mlength - Поле, в котором написано
"(максимум 110 символов):", соответственно принимает только
это значение ("(максимум 110 символов):").
message -
само сообщение, длинна которого по условию должна быть не
более 110 символов.
messlen - в этом поле нам
любезно пишется сколько осталось символов (с помощью
javascript). Значение поля зависит исключительно от размера
поля message и равно 110-размер message в символах. То есть
еcлu message="Hello!", то messlen=110-6=104. Это будет
необходимо учитывать в будущем при отправке данных.
Следующие параметры не так важны, но упомянуть о них
стоит.
transliterate - флажок, отвечающий за
транслитерацию. По умолчанию значение его равно "on" (не
смотря на то, что в теге написано checked, значие "on" этот
флажок принимает после отправки данных
формы)
send_after_flag - флажок, который надо будет
отметить, еcлu вы вдруг захотите отложить отправку, по
умолчанию не отмечен и, соответственно, равен пустой
строке.
Следующие параметры имеют смысл только при
отмеченном send_after_flag
send_hour - час
отправления в формате hh (00, 01 ? 22), по умолчанию параметр
не установлен и равен -1 (минус один).
send_minute -
минута отправления в формате mm, по умолчанию равен
-1.
send_day - число месяца отправления в формате
dd, по умолчанию -1.
send_month - месяц отправления
по-русски в родительном падеже (Января, Августа), по умолчанию
-1.
send_year - год отправления в формате yyyy
(2004), по умолчанию -1.
Структура запроса
Браузер пользователя при отправке данных формы, генерирует
запрос для скрипта sms2.
Запрос состоит из заголовка
и тела запроса. Тело запроса - это просто структурированные
данные формы (как их структурировать написано ниже). Давайте
лучше по-подробней разберемся с заголовком
запроса.
Заголовок должен быть исключительно таким:
POST /misc/sms2 HTTP/1.1.
Host:
www.megafonmoscow.ru
Referer:
http://www.megafonmoscow.ru/misc/sms
User-Agent:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1)
Content-Type:
application/x-www-form-urlencoded
Accept:
*/*
Accept-Encoding: gzip, deflate
Connection:
Keep-Alive
Content-Length: XXX
(Content-Length: XXX, где XXX - размер тела запроса в символах.)
В этом месте мы немного хитрим. Ведь наш скрипт будет выполняться на сервере, а это значит, что такие параметры, как Referer (откуда мы пришли) и User-Agent (Браузер), при стандартном запросе с сервера, будут отсутствовать по вполне логичным причинам (запрос идет с сервера, а не от браузера). Таким образом, нам приходится подделывать заголовок запроса, что бы все выглядело так, как будто сообщение отправляет реальный пользователь с вполне, кстати говоря, реальным IP (IP сервера, откуда будет запускаться скрипт).
Формируем скрипт.
Продвигаемся еще глубже. Формируем тело скрипта. Листинг его приведен в самом конце страницы, а здесь и далее скрипт формируется последовательно с комментариями.
1. Формируем данные формы:
//
Переменные
$prefix='7926';
$addr='0000000'; //
телефон
$mlength='(максимум 110
символов):';
$message='Hi';
$messlen=110-strlen($message);
// Зависит от длинны сообщения. В Мегафоне ораничение на 110
символов
$transliterate='on';
$send_after_flag='';
$send_hour='-1';
$send_minute='-1';
$send_day='-1';
$send_month='-1';
$send_year='-1';
SMS, содержащее одно слово "Hi", отправляем на телефон +79260000000. Имена переменныъх совпадают с именами тегов input. Значения всех стоят по умолчанию, кроме трех: prefix, addr, message и messlen
2. Формируем тело запроса:
// Тело
запроса
$POSTData=
"prefix=".urlencode($prefix)."&".
"addr=".urlencode($addr)."&".
"mlength=".urlencode($mlength)."&".
"message=".urlencode($message)."&".
"messlen=".urlencode($messlen)."&".
"transliterate=".urlencode($transliterate)."&".
"send=".urlencode('Отправить')."&".
"send_hour=".urlencode($send_hour)."&".
"send_minute=".urlencode($send_minute)."&".
"send_day=".urlencode($send_day)."&".
"send_month=".urlencode($send_month)."&".
"send_year=".urlencode($send_year);
Тело запроса при помощи метода POST формируются также как
при методе GET. А именно структура тела запроса такая:
параметр_1=значение_параметра_1&параметр_2=значение_параметра_2&?&параметр_N=значение_параметра_N;
Так
же формируем тело запроса и мы.
Функция urlencode
встроена в php и используется для перекодирования всех
значений параметров в формат тела запроса (пробелы заменяются
на "+", буквы на последовательности символа "%" и двух чисел в
шестнадцатиричном формате).
3. Теперь сформируем весь запрос, состоящий из заголовка и тела.
// Запрос с заголовком и телом
$len=strlen($POSTData); // Размер в символах
тела запроса
$nn="\r\n"; // возврат каретки и символ новой
строки
$request=
"POST /misc/sms2
HTTP/1.1".$nn.
"Host:
www.megafonmoscow.ru".$nn.
"Referer:
http://www.megafonmoscow.ru/misc/sms".$nn.
"User-Agent:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1)".$nn.
"Content-Type:
application/x-www-form-urlencoded".$nn.
"Accept:
*/*".$nn.
"Accept-Encoding: gzip,
deflate".$nn.
"Connection:
Keep-Alive".$nn.
"Content-Length:
$len".$nn.$nn.
"$POSTData";
Главное ничего не забыть и соблюсти все основополагающие принципы построения запроса. Каждый параметр заголовка запроса должен начинаться с новой строки. Последовательность символов возврата каретки (\r) и новой строки (\n) заменила переменная $nn, объявленная выше. Параметр Content-Length формируется в зависимости от длинны тела запроса $len ($len=strlen($POSTData). И не забудьте отделить заголовок запроса от тела пустой строкой! Не соблюдение, по крайней мере, одного из этих пунктов, может привести к неудовлетворительным результатам.
4. Теперь осталось только присоединиться к хосту и
отправить наш запрос.
Вот как это осуществляется:
// Открываем сокет и отсылаем запрос
скрипту
$socket='www.megafonmoscow.ru';
if ($fp = fsockopen($socket, 80, &$errno,
&$errstr, 30))
{
fputs($fp,$request);
fclose($fp);
}
else
{
print "Невозможно присоединиться, по причине:$errstr
($errno)<br>\n"; exit;
}
Мы присоединяемся к сокету 'www.megafonmoscow.ru' через стандартный 80 порт для http запросов. И работаем с сокетом как с файлом. Функцией fputs отправляем наш запрос. Потом закрываем соединение.
Все, скрипт собран, его листинг приведен ниже, и на этом предлагаю закончить. На последок хочу сказать, что многие операторы связи стараются защитить себя от подобных скриптов, ставя на их пути различные преграды. Удачный пример: Beeline, что бы отправить SMS, надо, помимо прочего, еще и вписать в специальное поле секретный код (последовательность цифр), указанный на картинке.
Полный листинг php скрипта отправки SMS
//
Переменные
$prefix='7926';
$addr='0000000'; //
телефон
$mlength='(максимум 110
символов):';
$message='Hi';
$messlen=110-strlen($message);//
Зависит от длинны сообщения В мегафоне ораничение на 110
символов
$transliterate='on';
$send_after_flag='';
$send_hour='-1';
$send_minute='-1';
$send_day='-1';
$send_month='-1';
$send_year='-1';
//
Тело
запроса
$POSTData=
"prefix=".urlencode($prefix)."&".
"addr=".urlencode($addr)."&".
"mlength=".urlencode($mlength)."&".
"message=".urlencode($message)."&".
"messlen=".urlencode($messlen)."&".
"transliterate=".urlencode($transliterate)."&".
"send=".urlencode('Отправить')."&".
"send_hour=".urlencode($send_hour)."&".
"send_minute=".urlencode($send_minute)."&".
"send_day=".urlencode($send_day)."&".
"send_month=".urlencode($send_month)."&".
"send_year=".urlencode($send_year);
$len=strlen($POSTData);
// Размер в символах тела запроса
$nn="\r\n"; // возврат
каретки и символ новой строки
// Запрос с заголовком и
телом
$request=
"POST /misc/sms2
HTTP/1.1".$nn.
"Host:
www.megafonmoscow.ru".$nn.
"Referer:
http://www.megafonmoscow.ru/misc/sms".$nn.
"User-Agent:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1)".$nn.
"Content-Type:
application/x-www-form-urlencoded".$nn.
"Accept:
*/*".$nn.
"Accept-Encoding: gzip,
deflate".$nn.
"Connection:
Keep-Alive".$nn.
"Content-Length:
$len".$nn.$nn.
"$POSTData";
// Открываем сокет и
отсылаем запрос
скрипту
$socket='www.megafonmoscow.ru';
if ($fp
= fsockopen($socket, 80, &$errno, &$errstr, 30))
{
fputs($fp,$request);
echo
fgets($fp,1024);
fclose($fp);
}
else {
print
"Невозможно присоединиться, по причине:$errstr
($errno)<br>\n"; exit;
}
Ну вот, и все на сегодня, надеюсь Вам понравится данный скрипт, я его честно не пробовал, так спешил донести информацию в массы, но обязательно попробую.
Если у Вас есть интересные материалы, милости просим на наш e-mail.
Мы рады Всем Вашим сообщениям, единственное условие, при написании писем просьба указывать тему письма - "Вопрос по рассылке".
У нас работает анти-спам, и письма с подозрительными темами просто удаляются.
Напоминаем, что на нашем сайте - siteoff.net открылись новые разделы ( каталог скриптов, каталог аватаров для форумов, и конечно же каталог ссылок на Ваши ресурсы), до завершения нашей рекламной акции по раздаче визитов активной раскрутки остается пол месяца, спешите, можно и опоздать:).
Если у Вас есть вопросы, которые требуют пояснений, или у Вас есть скрипт, который Вы не можете разобрать, установить или не получается использовать, присылайте в архиве нам на e-mail, и мы постараемся Вам ответить, помочь или подсказать.
Ваши материалы принимаются на E-mail: kain@vipmail.ru после модерации сообщения переносятся в ближайшую рассылку. Примерно 1 раз в месяц будут публиковаться письма с вопросами читателей, и ответы на них.
Материалы рассылки доступны на сайте www.siteoff.net , также некоторые вопросы можно задать в на форуме сайта www.forum.siteoff.net .
Мы надеемся на долгое и благотворное сотрудничество, и желаем процветания Вашим проектам.
С уважением www.siteoff.net
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: inet.webbuild.siteoffnet |
Отписаться |
В избранное | ||