Форум сайта python.su
0
Появилась потребность постить некоторые изображения на стену, для того что бы их прикрепить к посту, как я понял, они сначала загружаются на сервер контакта.
С авторизацией я уже разобрался, использую библиотеки urllib и urllib2 для выполнения всех операций.
Раньше я никогда не сталкивался с загрузкой файлов на сервер и с multipart/form-encode, поэтому хочу попросить у вас некоторой помощи.
Я соснифал запросы идущие на сервер при загрузке фото с компьютера, вот что получается:
1) Вот что идет в заголовках при загрузки картинки на сервер - http://gyazo.com/44ed1e5e4e917d502d2bb925c28831e8
Т.е. как я понял загрузка идет на сервер cs309426.vk.com
2) Вот то что отправляется постом в этом же запросе - http://gyazo.com/67ee37176e1060e5082176313c2274b4
Как я понимаю это какое то представление картинки.
3) Но самое интересное это то, что в ответ я ничего не получаю:
http://gyazo.com/07ca90a26fcb5875d727e48a834b8080
Т.е. я думал что в ответ я получу ссылку на картинку, но ответ пуст, т.е. как бы картинка загружена и все …
4) Но потом идет следующий запрос на al_photos.php вот с такими заголовками - http://gyazo.com/2c5b88009e79aa309fee70b3870a13c4
и таким постом - http://gyazo.com/3375c8aa88d6ed2f4aa9c0b903aeb43b
где в параметре “photos” много непонятных значений, и откуда они берутся ума не приложу.
И вот уже в этом запросе я получаю ответ с двумя ссылками на свою загруженную картинку -
http://gyazo.com/03e837a7e0a00f3c0bb77637cb6d5b25
———————————–
Исходя из этого хотелось бы спросить, каким образом мне загружать картинки на сервер, я склоняюсь к методу описанному в низу этой статьи - http://www.doughellmann.com/PyMOTW/urllib2/, тем более находил тут на форуме такие же решения, правда для твиттера. Но даже если у меня получится загрузить фото на сервер то как получить ссылку на него, ведь в ответе этого запроса ничего не отдается?
Спасибо за советы …
Отредактировано Mozart (Окт. 22, 2012 17:47:07)
Офлайн
14
Выкинь urllib и возьми requests или grab.
HttpFox ты уже поставил, щелкни на вкладке post data на raw, скопируй запрос в блокнтот и вырежи данные картинки, потом оттуда сможешь восстановить post запрос.
Офлайн
0
В смысле здесь - http://gyazo.com/b930e3f09481e9ccf0ae816200b27c28
кликнуть на Copy Row и вставить то что скопировалось в блокнот?
И что значит вырезать данные картинки? Название файла и open(img, “rb”) ?
Насчет requests и grab посмотрю, спасибо
Отредактировано Mozart (Окт. 23, 2012 15:04:35)
Офлайн
14
Copy all rows. После “photo”;filename и до следующего ———————- по идее должно идти содержание картинки, его вырезаешь, чтобы экран не засоряло.
Офлайн
16
Офлайн
0
Нужно именно так разобраться как заливать изображения на сервер, без api …
Офлайн
0
Выбор пал на библиотеку Grab, но сразу же возникла проблема при установке:
Автор рекомендует скачивать именно ихнюю сборку pycurl, вот отсюда - http://grablib.org/static/pycurl-ssl-7.19.0.win32-py2.7.msi
Но проблема в том, что под мой компьютер подходят только win-amd64 приложения, другие не работают.
Естественно после установки pycurl'a и попытки его импорта я получаю вот такую простыню - http://gyazo.com/c5ed07d63525f35c89f3e09a80fae798
lxml я установил вот эту - lxml-3.0.1.win-amd64-py2.7.exe
Либа прекрасно работает
Grab я так же установил, но из за того что не работает pycurl получаю тоже самое - http://gyazo.com/4cf1d5fb74c0b99295f89556ef4e98dd
Так то я могу скачать нужную мне сборку pycurl вот отсюда же - http://www.lfd.uci.edu/~gohlke/pythonlibs/, но автор говорит что нужна именно его сборка, поэтому я в растерянности …
Может кто нибудь подсказать решение проблемы?
Заранее спасибо.
Отредактировано Mozart (Окт. 24, 2012 16:10:01)
Офлайн
14
Попробуй, мож получится. Или можешь requests взять, у него функционал очень похожий.
А почему под x64 не ставятся 32 битные модули?
Отредактировано odnochlen (Окт. 24, 2012 21:52:42)
Офлайн
173
odnochlenPython видимо 64 битный.
А почему под x64 не ставятся 32 битные модули?
Офлайн
0
Поставил pycurl amd64, Grab воспринял его нормально вроде, отослал несколько пост запросов на разные сайты, данные не теряются, все работает, вроде бы все в порядке :)
Офлайн