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。
有什么线索可以找到类似的东西吗?
【问题讨论】:
我认为来源是一个很好的起点。乍一看,它似乎评论很好,并且有一个类:TSSLSocket
pypi.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