代码之家  ›  专栏  ›  技术社区  ›  Nick Bolton

使用Python在internet上传输数据的最轻量级方法是什么?

  •  6
  • Nick Bolton  · 技术社区  · 15 年前

    我在地理位置分散的地方有两台电脑,都与互联网相连。在每台计算机上,我都运行一个Python程序,我希望从一台计算机向另一台计算机发送和接收数据。我希望使用最简单的方法,同时保持一定的安全性。

    我考虑过以下解决方案,但我不确定哪一个是最简单的:

    正如我所说,我希望解决方案在某种程度上是安全的,但简单性是最重要的要求。数据非常简单;类型A的对象,其中包含类型B的对象列表和一些其他字段。

    5 回复  |  直到 15 年前
        1
  •  3
  •   LeafStorm    15 年前

    最便宜、最简单的传输方式可能是XML-RPC。它在HTTP上运行(因此您可以通过这种方式保护它),它位于标准库中,并且与protobuf不同,您不必担心创建和编译数据类型文件(因为两端都运行Python,所以动态类型不应该是问题)。唯一需要注意的是,必须对XML-RPC中未表示的任何类型进行pickle或序列化。

        2
  •  9
  •   Alex Martelli    15 年前

    许多

    如果您不关心花费更多的带宽/内存/等等,也不关心用不同语言编写参与子系统的能力,那么协议缓冲区可能不是您的最佳选择。

    两者都不是 pickling ,如果我正确阅读了您的“稍微安全”要求:取消勾选适当构造的恶意pickle字符串可以在取消勾选的机器上执行任意代码。事实上,HTTP在一个稍微不同的意义上并不“有点安全”:该协议中没有任何东西可以阻止入侵者“嗅探”您的流量(因此您永远不应该使用HTTP发送机密的有效负载,除非您在发送有效负载之前对其使用强加密,并在接收到它之后撤消)。为了安全(同样取决于您在单词上的含义),您需要HTTPS或(设置更简单,不需要您购买证书!)SSH隧道。

    一旦在两台机器之间建立了SSH隧道(对于Python, paramiko 可以提供帮助,但甚至可以通过shell脚本或直接控制 ssh 命令行客户端还不错;-)您可以在其上运行任何协议(例如,HTTP很好),因为隧道端点可以作为给定编号的端口使用,您可以在这些端口上打开套接字。我个人建议使用JSON而不是XML来编码有效负载——参见 here 例如,对于一个类似XMLRPC的基于JSON的RPC服务器和客户机——但我想使用Python标准库附带的XMLRPC服务器和客户机更简单,因此可能更接近您所需要的。你为什么还要cherrypy?性能现在突然压倒了简单性了吗?这仅仅是因为整个体系结构的这一方面,而在其他任何情况下,简单性都比性能重要吗?这似乎是一组特别矛盾的架构选择

        3
  •  1
  •   yosser    15 年前

    或者,您可以直接转到套接字库,只需以自己的格式传输数据。

    http://www.amk.ca/python/howto/sockets/

        4
  •  0
  •   Community Mohan Dere    5 年前

    你可以考虑 Pyro Security chapter

    更新: 设置协议缓冲区似乎比设置协议缓冲区更简单,如果您的需求将来变得更复杂,则可能需要更少的工作(他们有一种方法可以做到这一点…:-)

        5
  •  0
  •   Sean Reifschneider    15 年前

    亚历克斯当然是对的。但是,我要补充一点,过去我一直非常乐意酸洗数据,并将其通过SSH推送到另一个进程进行解锁。这太容易了。

    但是,它不适合很多事情。您确实需要信任传入的数据,如果我的博客服务器接收到一篇经过修改的博客文章(我的客户端解析出标记或类似内容),我肯定会信任这些数据——它已经作为我进行了身份验证。

    亚历克斯工作的谷歌则完全不同。:-)

    推荐文章