【问题标题】:Python: Sending a large dictionary to a serverPython:将大字典发送到服务器
【发布时间】:2009-05-24 14:30:59
【问题描述】:

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

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

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

urllib2.urlencode(dataPlusId)

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

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

【问题讨论】:

    标签: python turbogears


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:

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

              【讨论】:

              • 出于安全原因,您不应通过网络传输腌制对象
              • 您可以伪造腌制数据来使 unpickler 崩溃。 XML 解析器对此进行了强化。
              • 偏执狂矫枉过正。听起来请求必须经过 SSL 加密和身份验证,因此只有授权用户才能尝试这种攻击。
              • 我宁愿确保它永远不会发生。默默无闻的安全不是解决方案。最好只在本地使用 pickle 并使用更好的协议进行网络传输。
              • 你可以验证文件的MD5,知道有没有被篡改过。
              猜你喜欢
              • 2015-10-20
              • 1970-01-01
              • 2015-05-03
              • 1970-01-01
              • 1970-01-01
              • 2017-08-24
              • 1970-01-01
              • 2018-10-14
              • 1970-01-01
              相关资源
              最近更新 更多