Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- # данные от аккаунта
- email = '***'
- password = '***'
- def parse_set_cookie(res):
- q = {}
- w = re.sub('; *expires=[^;]+', '', res.getheader('set-cookie'))
- w = w.split(',')
- for e in w:
- r, t = e.split(';')[0].split('=', 1)
- q[r.strip()] = t.strip()
- return q
- def build_cookie_string(cookie):
- L = []
- for k, v in cookie.items():
- L.append(k + '=' + v)
- return '; '.join(L)
- # модуль mimetypes не может работать с кириллическими типами(например, "аудио/AMR") и падает
- mime_types = {
- 'bmp': 'image/bmp',
- 'gif': 'image/gif',
- 'jpg': 'image/jpeg',
- 'jpeg': 'image/jpeg',
- 'png': 'image/png'
- }
- def multipart_form_data(boundary, fields, files=None):
- L = ['']
- for k, v in fields.items():
- L.append('Content-Disposition: form-data; name="' + k + '"\r\n\r\n' + v + '\r\n')
- if files:
- for k, v in files.items():
- f = open(v, 'rb')
- data = f.read()
- f.close()
- filename = v.replace('\\', '/').split('/')[-1]
- parts = filename.split('.')
- extension = parts[-1].lower() if len(parts) > 1 else ''
- content_type = mime_types[extension] if extension in mime_types else 'application/octet-stream'
- L.append('Content-Disposition: form-data; name="' + k + '"; filename="' + filename + '"\r\nContent-Type: ' + content_type + '\r\n\r\n' + data + '\r\n')
- return ('--' + boundary + '\r\n').join(L) + '--' + boundary + '--\r\n'
- def upload_photo(src):
- conn = httplib.HTTPConnection('dmir.ru')
- boundary = str(uuid.uuid4())
- post = multipart_form_data(boundary, {}, {'file': src})
- conn.request('POST', '/handlers/UpFileHandler.ashx?mode=add', post, {
- 'Cookie': build_cookie_string(cookie),
- 'Content-Type': 'multipart/form-data; boundary=' + boundary,
- })
- res = conn.getresponse()
- o = res.read()
- # js obj -> python dict
- exec 'o=' + re.sub('([a-z]+):', '"\\1":', o)
- return o['file'] + ':' + str(o['size'])
- def save_advertisment(keywords, country, city, adress, metro, location, rubric, sub_rubric, title, text, price, contacts, name, country_code, phone, comment, files):
- post = {
- '__EVENTTARGET': 'ctl00$ctl00$body$body$btnSave',
- '__EVENTARGUMENT': '',
- '__VIEWSTATE': view_state,
- 'ctl00$ctl00$body$SearchForm1$Keywords': '',
- 'ctl00$ctl00$body$body$hiddenCountry': country,
- 'ctl00$ctl00$body$body$location$txtTown': city,
- 'ctl00$ctl00$body$body$location$txtAddress': adress,
- 'ctl00$ctl00$body$body$location$hiddenMetro': metro,
- 'ctl00$ctl00$body$body$location$hiddenTown': location,
- 'ctl00$ctl00$body$body$listRubrics': rubric,
- 'ctl00$ctl00$body$body$listChildRubrics': sub_rubric,
- 'ctl00$ctl00$body$body$txtName': title,
- 'ctl00$ctl00$body$body$txtNote': text,
- 'ctl00$ctl00$body$body$txtPrice': price,
- 'ctl00$ctl00$body$body$hiddenEditContacts': contacts,
- 'ctl00$ctl00$body$body$txtFirstName': name,
- 'ctl00$ctl00$body$body$hiddenCountryCode': country_code,
- 'ctl00$ctl00$body$body$txtPhone': phone,
- 'ctl00$ctl00$body$body$txtComment': comment,
- 'ctl00$ctl00$body$body$chAcceptAdm': 'on',
- 'ctl00$ctl00$body$body$chAcceptRules': 'on',
- 'files': ','.join(files),
- 'delFiles': '',
- 'price': '',
- 'rubric': ''
- }
- post = urlencode(post)
- # сохраняем объявление
- conn = httplib.HTTPConnection('dmir.ru')
- conn.request('POST', '/user/announcement/save.aspx', post, {
- 'Cookie': build_cookie_string(cookie),
- 'Content-Type': 'application/x-www-form-urlencoded'
- })
- res = conn.getresponse()
- m = re.match('/user/announcement/add.aspx\?ok=1&id=\d+', res.getheader('location'))
- print 'Объявление сохранено и ожидает проверки' if m else 'Ошибка при сохранении объявления'
- import socket, socks, httplib, re, os, uuid
- from urllib import urlencode
- socket.setdefaulttimeout(30)
- # можно использовать TOR для анонимной публикации объявлений
- # socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
- # socket.socket = socks.socksocket
- # авторизуемся
- conn = httplib.HTTPConnection('dmir.ru')
- post = 'email=' + email + '&password=' + password + '&rememberMe=true&mode=login&windowname=true'
- conn.request('POST', '/webservices/logon.ashx', post, {
- 'Content-Type': 'application/x-www-form-urlencoded'
- })
- res = conn.getresponse()
- cookie = parse_set_cookie(res)
- # на странице добавления объявления вешаются дополнительные cookie + имеется скрытое поле __VIEWSTATE
- conn = httplib.HTTPConnection('dmir.ru')
- conn.request('GET', '/user/announcement/add.aspx', '', {
- 'Cookie': build_cookie_string(cookie)
- })
- res = conn.getresponse()
- # _cookie = parse_set_cookie(res)
- # cookie.update(_cookie)
- data = res.read()
- m = re.search('id="__VIEWSTATE" value="([^"]+)', data)
- view_state = m.group(1)
- files = []
- files.append(upload_photo('uploads/V mask prize.jpg'))
- save_advertisment('', '138', '', '', '', '1', '87', '664', 'Продам хуйню', 'Ну как-то так', '15000', '', 'Иван Иванович Иванов', '7_138', '', '', files)
- save_advertisment('', '138', '', '', '', '1', '87', '664', 'Хуй, пизда, Джигурда', 'маму ебал', '', '', 'Иван Иванович Иванов', '7_138', '', '', files)
Advertisement
Add Comment
Please, Sign In to add comment