Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Передача файла на сервер - выбор протокола [RSS Feed]

#1 Янв. 19, 2009 14:54:06

Metheo
От:
Зарегистрирован: 2009-01-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача файла на сервер - выбор протокола

Добрый день!
Уже задавал вопрос по написанию текстового протокола. Сейчас вопрос ближе к делу.

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

Пробую ковырять httplib для клиента и соотв. BaseHTTPServer для серверной части. Все вроде понятно,
в стартовой строке передаю команды, в заголовках - доп.инфу, в теле - если есть файл. Соотв. методы в httplib есть.
Проблема - ни в BaseHTTPServer, ни в SimpleHTTPServer не разобрался как написать метод который бы выдирал из клиентского реквеста передаваемый файл.
Как? =)



Офлайн

#2 Янв. 19, 2009 15:27:49

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Передача файла на сервер - выбор протокола

модуль cgi?



Офлайн

#3 Янв. 19, 2009 15:36:02

Metheo
От:
Зарегистрирован: 2009-01-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача файла на сервер - выбор протокола

Да, точно. Пытаюсь понять. Пока туго ((



Офлайн

#4 Янв. 19, 2009 16:56:07

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Передача файла на сервер - выбор протокола

Файл передавай с запросом POST, не известно как сервер отреагирует на GET, вроде, проигнорирует.
Попробуй использовать атрибут rfile (файловый объект), я не проверял и вообще не работал с данной библиотекой (BaseHTTPServer), но, вроде, оно. Судя по коду, можно передовать файл с GET, хотя это не правильно, на сколько я знаю. И, скажем, Apache или какой прокси, запросто похерит этот файл или выдаст ошибку. Пусть меня поправят, если ошибаюсь.

..bw



Офлайн

#5 Янв. 19, 2009 18:00:02

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Передача файла на сервер - выбор протокола

Если модуль cgi работает, тогда так:

import cgi
d=cgi.FieldStorage()
# где 'file' это имя формы отправки файла
filename=d['file'].filename
file=d['file'].file.read()
Проверить, работает ли модуль cgi, можно так:
import cgi
cgi.test()



Отредактировано (Янв. 19, 2009 18:01:30)

Офлайн

#6 Янв. 19, 2009 18:15:15

Metheo
От:
Зарегистрирован: 2009-01-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача файла на сервер - выбор протокола

igor.kaist спасибо!
Я просто сначала понял так что вы имели ввиду модуль CGIHTTPServer. Там действительно есть метод, обрабатывающий запросы POST (запросы в которых клиент (как и в PUT) может цеплять в данные.)
Мне функционал cgi не нужен. Только возможность передавать с клиента на сервер команды(+цеплять файлы) и получать ответы(статус обработки команд).
bw правильно говорит начет файлового объекта rfile.
Пытаюсь разобраться как с ним работать…



Офлайн

#7 Янв. 19, 2009 18:19:07

Metheo
От:
Зарегистрирован: 2009-01-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача файла на сервер - выбор протокола

bw
Файл передавай с запросом POST, не известно как сервер отреагирует на GET, вроде, проигнорирует.
Попробуй использовать атрибут rfile (файловый объект), я не проверял и вообще не работал с данной библиотекой (BaseHTTPServer), но, вроде, оно. Судя по коду, можно передовать файл с GET, хотя это не правильно, на сколько я знаю. И, скажем, Apache или какой прокси, запросто похерит этот файл или выдаст ошибку. Пусть меня поправят, если ошибаюсь.

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



Офлайн

  • Начало
  • » Network
  • » Передача файла на сервер - выбор протокола[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version