Внимание! Информация предоставлена исключительно с целью ознакомления. За использование материалов статьи в противозаконных целях автор ответственности не несет.
Сегодня я рассмотрю возможности python, а точнее его встроенных библиотек urllib и urllib2. Напишем скрипт, который после авторизации на форуме сможет с определенной частотой постить сообщения в выбранной ветке. На операционный стол ложится Благовещенский форум Амит ру ( powered by miniBB ). Щипцы-зажимы. Для разработки python бота нам понадобится:
- python 2.*
- PyScripter
- сетевой анализатор Wireshark
и немного времени.
Исследуем форум Амит (Благовещенск)
Запускаем Wireshark, настраиваем фильтр только на http и логинимся на любимый форум. И вот что он нам показывает:
(в POST-запросе передается логин и пароль)
python под windows(после отправки логина и пароля осуществляется редирект на /forum/index.php? )
Из-за использования в механизме аутентификации кукисов, придется использовать модуль cookielib. В прошлом посте я не использовал прокси. Исправляюсь.
Исходный код апалки для амита
#импортируем сетевые библиотеки import urllib import urllib2 import cookielib #начальные условия message = u'up' user = u'login' pasw = u'password' prox = '94.127.88.46:3128' #номера форума и топика #1 - это "Общий раздел" forum = '1' topic = '41298' host = 'http://www2.amit.ru/forum/index.php?' #Заголовочная информация скопированная из снифера #со вставленными логином и паролем headers = { 'User-Agent' : 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.00', 'Host' : 'www2.amit.ru', 'Accept' : 'text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1', 'Accept-Language' : 'ru-RU,ru;q=0.9,en;q=0.8', 'Accept-Charset' : 'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1', 'Referer' : 'http://www2.amit.ru/forum/index.php', 'Connection' : 'Keep-Alive, TE', 'TE' : 'TE: deflate, gzip, chunked, identity, trailers' } post = urllib.urlencode({ 'user_usr' : user.encode('cp1251'), 'user_pwd' : pasw.encode('cp1251'), 'mode' : 'login', 'queryStr' : '', 'pagetype' : 'index' }) #делаем указатель на прокси-сервер proxy = urllib2.ProxyHandler({'http' : prox}) #Создаем кукис-агент CookieJar = cookielib.CookieJar() #создаем открывалку страниц с уже готовыми кукис-агентом и указателем прокси сервера opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(CookieJar), proxy) #Осуществляем аутентификацию conn = urllib2.Request(host, post, headers) data = opener.open(conn) #теперь в кукис-агент помещена информация о отм что мы залогинены #описываем процедуру отправления сообщения def posting(message, forum, topic): #формируем запрос с текстом сообщения post = urllib.urlencode({ 'postText': message.encode('cp1251'), 'action' : 'pthread', 'forum' : forum, 'topic' : topic }) conn = urllib2.Request(host, post, headers) #отправляем запрос data = opener.open(conn) #вызываем процедуру posting(message, forum, topic)
P.S. Используя модуль time, данный скрипт легко модифицировать для автоматического апанья в рекламном.
python cookie
Для удаления сообщений (на Амите в течении получаса) необходимо в POST-запросе передавать значение установленных cookies. Доступ к ним можно получить следующим образом (после авторизации, естественно).
for cook in enumerate(CookieJar): print cook[1].name, cook[1].value
#1 by toly on 7 Июнь 2010 - 1:27
По-позже можно и скринкаст снять…