Python:将大型字典发送到服务器

时间:2009-05-24 14:30:59

标签: python turbogears

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

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

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

urllib2.urlencode(dataPlusId)

但实际上,执行身份验证和接受数据集的方法不必了解数据。数据可以透明地传输和接受,并移交给使用数据的另一种方法。

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

6 个答案:

答案 0 :(得分:4)

我同意所有关于避免泡菜的答案,如果安全是一个问题(可能不是如果发送者在数据未被破坏之前得到认证 - 但是,当安全问题出现时,两级防御可能比一个更好);在这种情况下,JSON通常是有帮助的(或者,XML,如果没有别的办法......! - )。

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

答案 1 :(得分:3)

我认为最好的方法是以适当的传输格式对数据进行编码(您不应该使用pickle,因为它不是保存,但它可以是二进制)并将其转换为multipart post request

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

如果您只是将它再次转回字典,那么序列化/反序列化为文本或XML可能有点过分了。

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

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