Форум сайта python.su
Добрый день!
Уже задавал вопрос по написанию текстового протокола. Сейчас вопрос ближе к делу.
Задача: написать клиентскую и серверную части текстового протокола (клиент и сервер работают через сетевые сокеты). Клиент может посылать серверу команды и файлы. Сервер выполняет команды, обрабатывает принимаемые файлы и возвращает клиенту статусные сообщения.
Пробую ковырять httplib для клиента и соотв. BaseHTTPServer для серверной части. Все вроде понятно,
в стартовой строке передаю команды, в заголовках - доп.инфу, в теле - если есть файл. Соотв. методы в httplib есть.
Проблема - ни в BaseHTTPServer, ни в SimpleHTTPServer не разобрался как написать метод который бы выдирал из клиентского реквеста передаваемый файл.
Как? =)
Офлайн
модуль cgi?
Офлайн
Да, точно. Пытаюсь понять. Пока туго ((
Офлайн
Файл передавай с запросом POST, не известно как сервер отреагирует на GET, вроде, проигнорирует.
Попробуй использовать атрибут rfile (файловый объект), я не проверял и вообще не работал с данной библиотекой (BaseHTTPServer), но, вроде, оно. Судя по коду, можно передовать файл с GET, хотя это не правильно, на сколько я знаю. И, скажем, Apache или какой прокси, запросто похерит этот файл или выдаст ошибку. Пусть меня поправят, если ошибаюсь.
..bw
Офлайн
Если модуль cgi работает, тогда так:
import cgi
d=cgi.FieldStorage()
# где 'file' это имя формы отправки файла
filename=d['file'].filename
file=d['file'].file.read()
import cgi
cgi.test()
Отредактировано (Янв. 19, 2009 18:01:30)
Офлайн
igor.kaist спасибо!
Я просто сначала понял так что вы имели ввиду модуль CGIHTTPServer. Там действительно есть метод, обрабатывающий запросы POST (запросы в которых клиент (как и в PUT) может цеплять в данные.)
Мне функционал cgi не нужен. Только возможность передавать с клиента на сервер команды(+цеплять файлы) и получать ответы(статус обработки команд).
bw правильно говорит начет файлового объекта rfile.
Пытаюсь разобраться как с ним работать…
Офлайн
bwКак я понял не важно как будет называться запрос. Мне главное чтобы на сервере был метод обработчик запроса (это можно написать), а в клиентском модуле - соответствующие методы. Курю “cgihttpserver”…
Файл передавай с запросом POST, не известно как сервер отреагирует на GET, вроде, проигнорирует.
Попробуй использовать атрибут rfile (файловый объект), я не проверял и вообще не работал с данной библиотекой (BaseHTTPServer), но, вроде, оно. Судя по коду, можно передовать файл с GET, хотя это не правильно, на сколько я знаю. И, скажем, Apache или какой прокси, запросто похерит этот файл или выдаст ошибку. Пусть меня поправят, если ошибаюсь.
..bw
Офлайн