Отправка изображения с постом - PullRequest
0 голосов
/ 13 декабря 2010

Я хочу заполнить веб-форму скриптом Python и отправить с POST-запросом. Проблема в том, что форма загружает файлы. Я нашел это: плакат для питона. Итак, я пришел с FireBug на сайт с формой и заполнил ее. Что я увидел:

values[action]  add_save
values[mod] blog
values[depth]   2
values[pid] 121
values[title]   title
values[title_eng]   title_en
img PNG...[a lot of binary image data]

Этот сайт использует авторизацию, поэтому у меня есть:

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, theurl, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)

opener = poster.streaminghttp.register_openers()
opener.add_handler(authhandler)

Теперь я пришел с образцом по умолчанию с веб-сайта и написал код:

index = """some parsed integer"""
datagen, headers = multipart_encode({
        'values[action]': 'add_save',
        'values[mod]': 'blog',
        'values[depth]': '2',
        'values[pid]': index,
        'values[title]' : 'title',
        'values[title_eng]' : 'title_eng',
        'img': open('1.png', 'rb')
    })

request = urllib2.Request(theurl, datagen, headers)
getdata = urllib2.urlopen(request)
print getdata.read()

У меня нет ошибок и т. Д. Но после отправки POST скрипт не добавляет его в базу данных (когда я делаю это руками, все нормально).

Я добавил этот код:

for value in datagen:
    print value

И результат: ссылка . (123 число в тексте - это значение переменной индекса).

Ответы [ 2 ]

0 голосов
/ 14 декабря 2010

Проверяли ли вы ответы на все ваши запросы (в том числе вход на сайт), чтобы убедиться, что вам предоставлена ​​правильная страница и установлен правильный файл cookie?

0 голосов
/ 14 декабря 2010

Я не использовал ваш подход раньше, но успешно использовал MultipartPostHandler, чтобы сделать что-то подобное.Сокращенно, пример будет выглядеть следующим образом.


import MultipartPostHandler
import urllib2

form_opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler) 
urllib2.install_opener(form_opener)
datagen = {vars}
o=opener.open(url, datagen) 

MultipartPostHandler можно найти здесь.

Вы также можете добавить urllib2.HTTPCookieProcessor() к новичку, чтобы обработать аутентификацию следующим образом:


import urllib

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor()) 
# Or, (MultipartPostHandler.MultipartPostHandler, urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)
login = urllib.urlencode(dict(username='user',password='pass',login='Login')) 
o=opener.open(url, login) 

Это мой первый пост, так что простите меня, если я немного не в порядке:)

...