@badtrips

Как загрузить файл на web сервер с помощью python 2.7?

Привет! Столкнулся с проблемой загрузки подготовленного файла на web-сервер. Досконально изучить сейчас всё не могу, по примерам, найденным в Интернете не получается.

Есть страничка, на которой выбирается файл с локального компьютера, нажимается кнопка и он загружается. В коде фрейма, на котором находится кнопка для загрузки, есть следующая строка:

<input type='button' value='Go!' class='normalbutton' onClick="this.value='Working...'; document.getElementById('fileform').action='/probe/core/importExport/data.xml?'+'probe&';document.getElementById('fileform').submit()"> </input></td>


Когда я нажимаю на кнопку загрузки, в консоли браузера появляется post запрос вида
x.x.x.x/probe/core/importExport/data.xml?probe& и соответсвенно код 200.

В Питоне код:

cookie = cookielib.CookieJar()
req = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) 
req.addheaders = [('User-Agent', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11'), ] 
resp = req.open('http://'x.x.x.x') # - авторизуюсь, для заливки нужен доступ
print 'CODE AUTH: ' , resp.getcode() # - возвращает 200, всё ок
# и пробую загрузить файл:
params = { 'fileupload': open('eth_streamlist_ex.xml', 'r') }
data_encoded = urlencode(params)
upl = req.open('http://x.x.x.x/probe/core/importExport/data.xml?probe&', data_encoded)
print 'CODE UPLOAD : ',upl.getcode() # - возвращает 200,  но изменений со стороны сервера нет, файл не загружен.


На stackoverflow пишут что для такой загрузки нужно использовать модуль poster, но нет ли более простого способа без сторонних библиотек? Может я ссылку для загрузки не верно указываю?
  • Вопрос задан
  • 856 просмотров
Решения вопроса 1
viktorvsk
@viktorvsk
1. Используйте нормальный input type=file, form multipart=true для загрузки файлов, а не эту магию с джаваскриптом
2. Ставьте брейкпоинт при получении запроса и смотрите, что вам приходит от клиента
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы