0

我有一个应该将状态信息传递给服务器的应用程序。此信息实际上是一个带有字符串键的大型字典。

服务器将运行基于 Turbogears 的 Web 应用程序,因此调用的服务器端方法接受任意数量的关键字参数。

除了实际数据之外,还应传输一些与身份验证相关的数据(id、密码..)。一种方法是简单地对包含所有这些内容的大型字典进行 urlencode 编码,然后将其发送到服务器的请求中。

urllib2.urlencode(dataPlusId)

但实际上,进行身份验证和接受数据集的方法不必对数据了解太多。数据可以透明地传输和接受,并交给另一个处理数据的方法。

所以我的问题是:一般来说,将大型数据字典传输到服务器的最佳方式是什么?而且,在这种特定情况下,这里处理身份验证的最佳方法是什么?

4

6 回答 6

4

如果安全是一个问题,我同意所有关于避免腌制的答案(如果发件人在数据未被腌制之前获得身份验证,则可能不是 - 但是,当安全存在问题时,两层防御可能比一层更好);在这种情况下,JSON 通常会有所帮助(或者,XML,如果没有别的办法......!-)。

正如 SpliFF 建议的那样,理想情况下,身份验证应该留给网络服务器,而 SSL(即 HTTPS)通常对此很有用。如果这不可行,但让客户端和服务器共享一个“秘密”是可行的,那么以加密形式发送序列化字符串可能是最好的。

于 2009-05-24T15:35:24.600 回答
3

我认为最好的方法是以适当的传输格式对您的数据进行编码(您不应该使用 pickle,因为它不是保存的,但它可以是二进制的)并将其作为多部分发布请求传输

我不知道你是否可以让它与 repoze.who 一起工作。如果它不支持一步登录和函数调用,您可能必须自己验证凭据。

如果您可以将数据包装在 xml 中,您也可以使用XML-RPC

于 2009-05-24T14:58:50.180 回答
2

为什么不将字典序列化为文件,然后上传文件?这样,服务器可以将对象读回字典。

于 2009-05-24T14:59:06.047 回答
2

对您的 python 数据进行 POST(使用其他答案中建议的二进制文件)并使用您的网络服务器处理安全性。Apache 和 Microsoft 服务器都可以使用多种方法(SSL 客户端证书、密码、系统帐户等)进行身份验证

如果您只是想再次将其转回字典,则对文本或 XML 进行序列化/反序列化可能是矫枉过正)。

于 2009-05-24T15:09:32.890 回答
2

我个人会在两端使用 SimpleJSON,然后将“文件”(它实际上只是一个流)作为多部分数据发布。

但这就是我。还有其他选择。

于 2009-05-24T17:52:59.827 回答
1

您是否尝试过在数据上使用 pickle ?

于 2009-05-24T15:02:18.473 回答