Python: отправка большого словаря на сервер - PullRequest
0 голосов
/ 24 мая 2009

У меня есть приложение, которое должно передавать информацию о состоянии на сервер. Эта информация представляет собой большой словарь со строковыми ключами.

На сервере будет запущено веб-приложение на базе Turbogears, поэтому вызываемый метод на стороне сервера принимает произвольное количество аргументов ключевого слова.

В дополнение к фактическим данным должны быть переданы некоторые данные, относящиеся к аутентификации (id, пароль ..). Один из подходов состоит в том, чтобы просто скопировать большой словарь, содержащий все это, и отправить его в виде запроса на сервер.

urllib2.urlencode(dataPlusId)

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

Итак, мой вопрос: каков наилучший способ передачи большого словаря данных на сервер в целом? И, в данном конкретном случае, каков наилучший способ борьбы с аутентификацией здесь?

Ответы [ 6 ]

4 голосов
/ 24 мая 2009

Я согласен со всеми ответами об избежании рассола, если безопасность является проблемой (это может быть не так, если отправитель будет аутентифицирован до того, как данные не будут выбраны - но, когда речь идет о безопасности, два уровня защиты могут быть лучше, чем один ); JSON часто помогает в таких случаях (или XML, если больше ничего не подойдет ...! -).

Аутентификацию в идеале следует оставить на веб-сервере, как рекомендует SpliFF, и SSL (то есть HTTPS), как правило, подходит для этого. Если это невозможно, но возможно, чтобы клиент и сервер совместно использовали «секрет», то отправка сериализованной строки в зашифрованном виде может быть оптимальной.

3 голосов
/ 24 мая 2009

Я думаю, что лучший способ - это закодировать ваши данные в соответствующем формате передачи (вы не должны использовать pickle, поскольку он не сохранен, но может быть двоичным) и передать его как многочастный пост-запрос

Чего я не знаю, можно ли заставить его работать с repoze.who. Если он не поддерживает вход и вызов функции за один шаг, возможно, вам придется проверить учетные данные самостоятельно.

Если вы можете обернуть ваши данные в xml, вы также можете использовать XML-RPC .

2 голосов
/ 24 мая 2009

Я бы лично использовал SimpleJSON на обоих концах и просто разместил «файл» (на самом деле это был бы просто поток) как составные данные.

Но это я. Есть и другие варианты.

2 голосов
/ 24 мая 2009

Сделайте POST ваших данных Python (используйте двоичный файл, как предложено в других ответах) и управляйте безопасностью, используя ваш веб-сервер. Серверы Apache и Microsoft могут выполнять аутентификацию, используя самые разные методы (сертификаты клиента SSL, пароль, системные учетные записи и т. Д.)

Сериализация / десериализация в текст или XML, вероятно, излишне, если вы просто собираетесь снова включить его в словарь).

2 голосов
/ 24 мая 2009

Почему бы вам не сериализовать словарь в файл и загрузить файл? Таким образом, сервер может прочитать объект обратно в словарь.

1 голос
/ 24 мая 2009

Вы пробовали использовать рассол на данных?

...