Python 中使用 HTTPS 的示例 Apache Thrift 服务

Posted

技术标签:

【中文标题】Python 中使用 HTTPS 的示例 Apache Thrift 服务【英文标题】:Example Apache Thrift service which uses HTTPS, in Python 【发布时间】:2013-04-30 12:31:09 【问题描述】:

我已经能够找到examples,了解如何使用 Apache Thrift 来实现服务,该服务使用 SSL 作为 Java 中的传输 ..。但不是在 Python 中。

我想使用 Apache Thrift 生成样板代码,用于调用用 Python 编写的服务,这些服务将从 android 中调用。传输方式必须是 HTTPS。

有什么线索可以找到类似的东西吗?

【问题讨论】:

我认为来源是一个很好的起点。乍一看,它似乎评论很好,并且有一个类:TSSLSocketpypi.python.org/pypi/thrift/0.9.0 我希望得到比阅读源代码更友好的东西。 :) ***.com/questions/10964755/… 给了我一些线索——所以我想阅读源代码是我应该做的。您是正确的,来源有据可查。 :) 【参考方案1】:

你的客户应该是这样的:

from thrift.transport import THttpClient
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol

from tutorial import Calculator

transport = THttpClient.THttpClient('https://your-service.com')
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = Calculator.Client(protocol)

# Connect!
transport.open()
client.ping()

您可以在您的服务前面添加一个代理来终止 SSL 连接,然后将 http 请求传递到您的服务器,如下所示:

from thrift.protocol import TBinaryProtocol
from thrift.server import THttpServer

from tutorial import CalculatorHandler # assuming you defined this

handler = CalculatorHandler()
processor = Calculator.Processor(handler)
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = THttpServer.THttpServer(
    processor,
    ('', 9090),
    pfactory
)

print('Starting the server...')
server.serve()
print('done.')

【讨论】:

这是我可以在网上找到的唯一 Python HTTP 客户端/服务器(也不是套接字)示例。它有效!谢谢。【参考方案2】:

我在 php、Java 和 Python 中使用过 Thrift,您可能会注意到使用 Thrift 最糟糕的部分是它的文档。官方示例的一部分,有不同的语言版本:Official Source Code Tutorial。以下是一些网页,它们更详细地描述了如何实现客户端/服务器节俭协议:

Thrift.pl Thrift the missing guide

通过 SSL 保护您的连接将意味着通过添加几行新行来修改您的服务器/客户端,这是 Java 中的一个示例:

Secure Thrift

把最后的代码改写成python并不是什么难事

【讨论】:

AFAIK,不建议在 Python 中终止 SSL/TLS 连接。在许多边缘情况下,它会比像 nginx 这样的代理做得更差。

以上是关于Python 中使用 HTTPS 的示例 Apache Thrift 服务的主要内容,如果未能解决你的问题,请参考以下文章

google Round D APAC Test 2017 题解

python 使用StackContext在Tornado中全局存储请求数据的示例。请参阅https://groups.google.com/d/msg/python-tornado/8izNLhYj

Python学习手册之正则表达式示例--邮箱地址提取

APAC 2013 部分题解 | 训练记录

APAC 2013 部分题解 | 训练记录

Round B APAC Test 2016