невозможно отправить данные, используя urllib и urllib2 (python)

1

Привет всем (первый пост здесь).

Я пытаюсь отправить данные на веб-страницу. Эта веб-страница запрашивает два поля (файл и адрес электронной почты), если все в порядке, веб-страница возвращает страницу с сообщением "все в порядке" и отправляет файл на указанный адрес электронной почты. Я выполняю код ниже, и я ничего не получаю в своей учетной записи электронной почты.

import urllib, urllib2

params = urllib.urlencode({'uploaded': open('file'),'email': '[email protected]'})
req = urllib2.urlopen('http://webpage.com', params)
print req.read()

команда print дает мне код домашней страницы (я предполагаю, что вместо этого он должен дать код страницы "все в порядке").

Я думаю, что (на основе поиска google) модуль плаката должен делать трюк, но мне нужно поддерживать зависимости до минимума, поэтому я хотел бы использовать решение с использованием стандартных библиотек (если это возможно).

Заранее спасибо.

  • 0
    вам не хватает каких-либо заголовков? «Тип контента: application / x-www-form-urlencoded»
  • 0
    Пожалуйста, не размещайте свое решение в вопросе. Вы можете и должны ответить на свой вопрос, если ни один из приведенных ниже ответов не помог.
Показать ещё 1 комментарий
Теги:
file-upload
urllib2
urllib

3 ответа

3
Лучший ответ

Спасибо всем за ваши ответы. Я решаю свою проблему, используя библиотеку механизации.

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() 
  • 0
    Вы также можете принять это как ответ
1

Этот сайт может проверять 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

  • 0
    спасибо за ваш ответ, но ваше решение не решает мою проблему. Я думаю (я только что понял), что моя проблема как-то связана с тем, что страница нуждается в данных, которые должны быть закодированы как «multipart / form-data»
  • 0
    ХОРОШО. Тогда вы можете использовать то, что советовали: MultiPartPostHandler . Это несколько строк кода, так что это не совсем зависимость. Считайте, что это просто ваш собственный класс, который вы написали вчера для удобной загрузки файлов :)
Показать ещё 1 комментарий
0
  • 1
    Я предпочитаю использовать стандартные библиотеки, мне это нужно для более крупного проекта, и я хочу свести зависимости к минимуму ... но, возможно, мне следует отказаться и попробовать то, что вы предлагаете. спасибо за Ваш ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню