Найти - Пользователи
Полная версия: Grab + multipart/form-data
Начало » Network » Grab + multipart/form-data
1
Mozart
Помогите разобраться в некоторых вопросах касательно загрузки файлов на сервер.

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

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

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

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

Потому что это пример. Для каждого конкретного случая, естественно ключи multipart_post должны содержать названия полей из формы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB