NAME

 

post_to_bbs - рассылка сообщений в форумы, и доски объявлений.


DESCRIPTION

 

Используется для рассылки сообщений в форумы, доски объявлений... Работает очень примитивно - передает данные на URL прописанный в конфиге, не разбирая потом ответ сервера.

Командная строка:

-p

Число процессов [ 1 ]

-cfg

Файл конфигурации [ conf ]

-to

Тайм аут, секунды [ 120 ]

-bs

Длина блока данных, байты [ 4096 ]

-bc

Длина скачиваемых данных, в блоках по `-bs' байт. -1 - Все. [ -1 ]

--dmp

Дамп html'я в файл [ 1 ]

--sh

Создать shell скрипт.

-sh_h

Взять заголовок shell скрипта из этого файла. По умолчанию есть зашитый в скрипт.

-a

HEADER : Accept [ */* ]

-ac

HEADER : Accept-Charset [ koi8-r, iso-8859-1;q=0.01, us-ascii;q=0.01 ]

-al

HEADER : Accept-Language [ ru, en ]

-ua

HEADER : User-Agent [ Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) ]

-ct

HEADER : Content-Type [ application/x-www-form-urlencoded ]

-scp

Кодировка исходных данных [ KOI8-R ]

-dcp

Кодировка данных отправляемых на сервер [ KOI8-R ]

В конфиге парсятся следующие слова:

ACT

Адрес для передачи формы.

CP

Кодировка сервера.

NAME

Имя пользователя.

MAIL

Eamil пользователя.

URL

Home page пользователя.

SUBJ

Тема сообщения.

MSG

Сообщение.

HDN

Скрытые поля формы, передаваемые всегда.

Все остальное начинающееся с '_' считается HTTP заголовком, и передается серверу. ( '_' в начале отрезается. )

Строки начинающиеся с '#' считаются комментариями, состоящие из одних пробелов пропускаются.

Т.е. В начале скрипт спросит Вас ввести значения MAIL, NAME, URL, SUBJ, MSG. Далее в процессе разбора конфига эти значения подставляются аргументам... Т.е. например конфиг имеет вид:

 ACT   http://alisa/cgi/post.cgi
 CP    CP1251
 MAIL  email
 NAME  user
 HDN   group=34&uid=82478
 SUBJ  subject
 MSG   data
 _Cookie  cookie=67

то после ввода данных сервер получит примерно следующий заголовок:

 POST /cgi/post.cgi
 Host: alisa
 Content-Length: xxx
 ....
 Cookie: cookie=67

 group=34&uid=82478&email=_EMAIL_&user=_NAME_&subject=_SUBJ_&data=_MSG_

Значение поля _MSG_ вводятся до ^D

Значения CP, MAIL, NAME, URL, SUBJ, MSG, HDN - не обязательно должны все присутствовать.


NOTES

 

Чтобы не писать по сто раз сообщения можно в файл закатать, и вызывать скрипт так: ./post_to_bbs [ options ] < .msg В .msg каждое новое поле начинается с новой строки, ну короче чего объяснять, вместо STDIN'а данные читаются из файла в той же последовательности.

При перекодирование данных в различные кодировки пользуется модуль Cyrillic::CPconvert. Он поддерживает : CP1251, ECMA-CYRILLIC, IBM855, IBM866, IBM880, ISO-8859-5, KOI-8, KOI8-R, KOI8-U, MAC-UK и кривовато UTF8. В любом случае выбранная кодировка не влияет на заголовок `Accept-Charset' ( опция командной строки -ac ) , поэтому его все равно надо руками прописывать :(. При использовании опции --sh оно в принципе не передает в shell скрипт ни каких заголовков...

Ответ сервера не обрабатывается по идейным соображения, если надо ловить куки например то можно воспользоваться ключем --sh, который сгенерит shell скрипт в котором скачиванием ( по умолчанию ) занимается lynx. Все это дело легко редактируется. А самому разбирать кукисы влом просто... 30X ответы ( редирект ) сервера не ловится по причине того, что можно 'постараться' и прописать в конфиге заголовок который и ждет сервер, да и часто после успешного добавления сообщения, скрипт на сервере намеренно перебрасывает на другую страницу, типа страхуются от двойного нажатия кнопки отправить... Да и вообще кому сильно надо напишет use LWD и свой скрипт простенький...

При включенном --dmp ( по умолчанию ) в html файлы скидывается все, что получено от сервера. В начале пишется заголовок ответа сервера, потом <base href='..'>, потом все остальное. Заголовок скидывается скорее для более детального анализа данных полученных от сервера.

Строки заголовка запроса к серверу ( User-Agent, Accept, ... ) могут быть прописаны в конфиге для каждого URL'я свои. Ну это так для гибкости, типа эмулировать конкретный броузер...

При использовании -p и --sh вместе через -p вызовов процедуры она вызывается в FG иначе в BG. ( Но --sh наверно только для *nix актуально, хотя под M$ можно извратиться и что то типа батника сваять... )

Да про M$ : там fork не работает поэтому -p там работать не будет..., ALARM'а там тоже нет, поэтому без таймаутов...