Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 27, 2012 10:02:51

Mozart
От:
Зарегистрирован: 2011-12-12
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Grab + multipart/form-data

Помогите разобраться в некоторых вопросах касательно загрузки файлов на сервер.

1) Обменник - rghost

• В начале попробовал залить файл с помощью обработки форм в Grab, все получилось -

g = Grab()
g.setup(log_file='C:\\Python27\\logging\\res.html')
g.go('http://rghost.ru/')
g.choose_form(1)
g.set_input('file', UploadFile('C:\\Arbitraje\\vkontakte\\ART\\str.jpg'))
g.submit()
g.response.url # 'http://rghost.net/41181803'

Тут на выходе сразу имеем URL с загруженной картинкой

• Теперь тоже самое, но с помощью POST запроса, соснифал то что происходит при отправке файла на сервер - http://gyazo.com/02446e8c6a1016761ca484c5131f03b8 и http://gyazo.com/a7ebe15eba664713532457d87542d1e5
В ответ на это сервер отдает ссылку с загруженным файлом - http://gyazo.com/410b0e559ce652bdd917cf14d0e9a337

Мой вариант запроса исходя из инструкции отправки файлов по докам - http://grablib.org/docs/grab/http_methods.html

Вот мой код -

g = Grab()
g.setup(log_file='C:\\Python27\\logging\\res.html')
g.go('http://rghost.ru/')
g.response.url # Почему то меня перекинет на .net домен, ну ладно - 'http://rghost.net/'
url = re.findall(r"action=\"(http.+?)\"\senctype=\"mul", g.response.body, re.S)[0] # Выдираем сервер для заливки файла, тут url = 'http://pion.rghost.net/files'
g.setup(multipart_post={'foo': 'bar', 'image': UploadFile('C:\\Arbitraje\\vkontakte\\ART\\str.jpg')}) # Подготавливаем запрос
g.go(url) # Отправляем запрос
g.response.url #http://rghost.net/ ...

В итоге меня перекидывает обратно на главную страницу. Может быть кто подскажет что я не так делаю? Очень уж хочется разобраться с тем, как отправлять файлы POST запросами, особенно учитывая то, что не везде где мне нужно отправить файл есть формы, или же они не работают.

• И еще меня интересует вопрос, в опции multipart_post используется словарь со значениями которые я не понимаю, к примеру ‘foo’: bar' - что это означает?
Или ‘image’: UploadFile - почему именно ‘image’ а не ‘file’ - к примеру?

Спасибо за ответы …



Отредактировано Mozart (Окт. 27, 2012 10:06:42)

Офлайн

#2 Окт. 27, 2012 13:28:13

Mozart
От:
Зарегистрирован: 2011-12-12
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Grab + multipart/form-data

В общем c rghost'om я разобрался, убрал из опции multipart_post – >> ‘foo’ : ‘bar’ который я не понимаю для чего нужен и ‘image’ заменил на ‘file’, тогда все отработало как нужно, картинка залилась, в ответ я получил ссылку для загрузки.

Вот код кому интересно - http://gyazo.com/2bb1828cb1c14d99cf66e6133508a4bd

По zalil.ru я думаю все аналогично, сейчас буду разбираться с sendspace.com, там почему то даже через форму файлы не заливаются, при нажатии на g.submit() выдает ошибку …



Офлайн

#3 Окт. 28, 2012 03:03:51

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Grab + multipart/form-data

Mozart
Почему то меня перекинет на .net домен, ну ладно - 'http://rghost.net/'
Перекидывает, если язык в юзерагенте нерусский, а в грабе рандом пул юзерагентов.

Mozart
g.setup(multipart_post={'foo': 'bar', 'image': UploadFile('C:\\Arbitraje\\vkontakte\\ART\\str.jpg')}) # Подготавливаем запрос
g.go(url) # Отправляем запрос
Это абсолютно дурацкий пример из офф доков. Как по мне, сетуп стоит вызывать только для опций, которые сохраняются для следующих запросов.

Офлайн

#4 Ноя. 8, 2012 19:05:31

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Grab + multipart/form-data

> И еще меня интересует вопрос, в опции multipart_post используется словарь со значениями которые я не понимаю, к примеру ‘foo’: bar' - что это означает? Или ‘image’: UploadFile - почему именно ‘image’ а не ‘file’ - к примеру?

Потому что это пример. Для каждого конкретного случая, естественно ключи multipart_post должны содержать названия полей из формы.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version