Привет всем (первый пост здесь).
Я пытаюсь отправить данные на веб-страницу. Эта веб-страница запрашивает два поля (файл и адрес электронной почты), если все в порядке, веб-страница возвращает страницу с сообщением "все в порядке" и отправляет файл на указанный адрес электронной почты. Я выполняю код ниже, и я ничего не получаю в своей учетной записи электронной почты.
import urllib, urllib2
params = urllib.urlencode({'uploaded': open('file'),'email': '[email protected]'})
req = urllib2.urlopen('http://webpage.com', params)
print req.read()
команда print дает мне код домашней страницы (я предполагаю, что вместо этого он должен дать код страницы "все в порядке").
Я думаю, что (на основе поиска google) модуль плаката должен делать трюк, но мне нужно поддерживать зависимости до минимума, поэтому я хотел бы использовать решение с использованием стандартных библиотек (если это возможно).
Заранее спасибо.
Спасибо всем за ваши ответы. Я решаю свою проблему, используя библиотеку механизации.
import mechanize
br = mechanize.Browser()
br.open('webpage.com')
email='[email protected]'
br.select_form(nr=0)
br['email'] = email
br.form.add_file(open('filename'), 'mime-type', 'filename')
br.form.set_all_readonly(False)
br.submit()
Этот сайт может проверять Referer, User-Agent и Cookies.
Способ справиться с этим - это использовать urllib2.OpenerDirector
который можно получить с помощью urllib2.build_opener
.
# Cookies handle
cj = cookielib.CookieJar()
CookieProcessor = urllib2.HTTPCookieProcessor(cj)
# Build OpenerDirector
opener = urllib2.build_opener(CookieProcessor)
# Valid User-Agent from Firefox 3.6.8 on Ubuntu 10.04
user_agent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8'
# Referer says that you send request from web-site title page
referer = 'http://webpage.com'
opener.addheaders = [
('User-Agent', user_agent),
('Referer', referer),
('Accept-Charset', 'utf-8')
]
Затем подготовьте параметры с urlencode
и отправьте запрос с помощью opener.open(params)
Документация для Python 2.7: cookielib, OpenerDirector
Попробуйте следующее: использование MultipartPostHandler для данных формы POST с помощью Python