Найти - Пользователи
Полная версия: Передача файла на сервер - выбор протокола
Начало » Network » Передача файла на сервер - выбор протокола
1
Metheo
Добрый день!
Уже задавал вопрос по написанию текстового протокола. Сейчас вопрос ближе к делу.

Задача: написать клиентскую и серверную части текстового протокола (клиент и сервер работают через сетевые сокеты). Клиент может посылать серверу команды и файлы. Сервер выполняет команды, обрабатывает принимаемые файлы и возвращает клиенту статусные сообщения.

Пробую ковырять httplib для клиента и соотв. BaseHTTPServer для серверной части. Все вроде понятно,
в стартовой строке передаю команды, в заголовках - доп.инфу, в теле - если есть файл. Соотв. методы в httplib есть.
Проблема - ни в BaseHTTPServer, ни в SimpleHTTPServer не разобрался как написать метод который бы выдирал из клиентского реквеста передаваемый файл.
Как? =)
igor.kaist
модуль cgi?
Metheo
Да, точно. Пытаюсь понять. Пока туго ((
bw
Файл передавай с запросом POST, не известно как сервер отреагирует на GET, вроде, проигнорирует.
Попробуй использовать атрибут rfile (файловый объект), я не проверял и вообще не работал с данной библиотекой (BaseHTTPServer), но, вроде, оно. Судя по коду, можно передовать файл с GET, хотя это не правильно, на сколько я знаю. И, скажем, Apache или какой прокси, запросто похерит этот файл или выдаст ошибку. Пусть меня поправят, если ошибаюсь.

..bw
igor.kaist
Если модуль cgi работает, тогда так:
import cgi
d=cgi.FieldStorage()
# где 'file' это имя формы отправки файла
filename=d['file'].filename
file=d['file'].file.read()
Проверить, работает ли модуль cgi, можно так:
import cgi
cgi.test()
Metheo
igor.kaist спасибо!
Я просто сначала понял так что вы имели ввиду модуль CGIHTTPServer. Там действительно есть метод, обрабатывающий запросы POST (запросы в которых клиент (как и в PUT) может цеплять в данные.)
Мне функционал cgi не нужен. Только возможность передавать с клиента на сервер команды(+цеплять файлы) и получать ответы(статус обработки команд).
bw правильно говорит начет файлового объекта rfile.
Пытаюсь разобраться как с ним работать…
Metheo
bw
Файл передавай с запросом POST, не известно как сервер отреагирует на GET, вроде, проигнорирует.
Попробуй использовать атрибут rfile (файловый объект), я не проверял и вообще не работал с данной библиотекой (BaseHTTPServer), но, вроде, оно. Судя по коду, можно передовать файл с GET, хотя это не правильно, на сколько я знаю. И, скажем, Apache или какой прокси, запросто похерит этот файл или выдаст ошибку. Пусть меня поправят, если ошибаюсь.

..bw
Как я понял не важно как будет называться запрос. Мне главное чтобы на сервере был метод обработчик запроса (это можно написать), а в клиентском модуле - соответствующие методы. Курю “cgihttpserver”…
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