post_to_bbs - рассылка сообщений в форумы, и доски объявлений.
Используется для рассылки сообщений в форумы, доски объявлений... Работает очень примитивно - передает данные на URL прописанный в конфиге, не разбирая потом ответ сервера.
Командная строка:
Число процессов [ 1 ]
Файл конфигурации [ conf ]
Тайм аут, секунды [ 120 ]
Длина блока данных, байты [ 4096 ]
Длина скачиваемых данных, в блоках по `-bs' байт. -1 - Все. [ -1 ]
Дамп html'я в файл [ 1 ]
Создать shell скрипт.
Взять заголовок shell скрипта из этого файла. По умолчанию есть зашитый в скрипт.
HEADER : Accept [ */* ]
HEADER : Accept-Charset [ koi8-r, iso-8859-1;q=0.01, us-ascii;q=0.01 ]
HEADER : Accept-Language [ ru, en ]
HEADER : User-Agent [ Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) ]
HEADER : Content-Type [ application/x-www-form-urlencoded ]
Кодировка исходных данных [ KOI8-R ]
Кодировка данных отправляемых на сервер [ KOI8-R ]
В конфиге парсятся следующие слова:
Адрес для передачи формы.
Кодировка сервера.
Имя пользователя.
Eamil пользователя.
Home page пользователя.
Тема сообщения.
Сообщение.
Скрытые поля формы, передаваемые всегда.
Все остальное начинающееся с '_' считается 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 - не обязательно должны все присутствовать.
Чтобы не писать по сто раз сообщения можно в файл закатать, и вызывать скрипт так: ./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'а там тоже нет, поэтому без таймаутов...