Python调用webservice

Python013

Python调用webservice,第1张

最近因工作需要,研究了一下调用webservice的方法,python 有两个包,支持调用webservice

有个小问题: 参数名 不知道 以_开头, 如 _token

希望对您有所帮助,谢谢

thrift服务在python中有自己的库,导入这个库,

然后用socket方式连接,

然后发送就可以了

下面是个例子

from thrift.transport import TTransport

from thrift.transport import TSocket

from thrift.transport import TSSLSocket

from thrift.transport import THttpClient

from thrift.protocol import TBinaryProtocol

from thrift.protocol import TCompactProtocol

host = “”

port = “”

ssl = “”

framed = “”#以上都是引入一些必要的包,还有声明一些变量

class workbench_client(object):

    def __init__(self, host, port, ssl, framed):

        socket = TSSLSocket.TSSLSocket(host, port, validate=False) if ssl else TSocket.TSocket(host, port)

        self.transport = TTransport.TFramedTransport(socket)

        protocol = TCompactProtocol.TCompactProtocol(self.transport)

        self.client = AntispamWorkbench.Client(protocol)

        self.transport.open()

        print "transport.open"  #init是初始化了与thrift服务连接的情况

    

    def matchOrderEntry(self, orderId,passengerId,driverIdList,data):

        cnt = self.client.matchOrderEntry(orderId, passengerId,driverIdList,data)

        print "start matchOrderEntry"

        print cnt #这个函数是示例,如何调用thrift接口

不同的语言、框架都有自己擅长的领域:Electron 基于 Chromium 和 Node.js 能以 Web 开发的模式打造桌面应用,开发用户界面又快捷又简单;Python 则在数据分析、自动化脚本等领域有非常多的应用。两者的社区生态都十分强大,由两者共同构建应用,在界面开发、功能、性能上能够强强联合;

为了简单验证技术可行性,我们来编写一个 Demo:

目的:验证 Electron 打造的桌面应用能够调用 Python,思路是使用 RPC 或 HTTP 或 WebSocket 进行通信

Demo 功能:输入 x、y 坐标,程序会移动鼠标到屏幕的 x,y 位置(通过 python 库 pyautogui 实现)

Demo 运行环境:MacOS、pyInstaller: 版本 4.5.1、python: 版本 3.9.7

源码:-------- 项目源码 --------

注意:移动鼠标需要授予应用控制权限,在 MacOS 下设置 偏好设置 ->隐私 ->辅助功能 ->允许对应的应用。

技术栈:NodeJS、Electron、Python、aiohttp(HTTP、WebSocket)、pyautogui(控制鼠标)

为了使 NodeJS 和 Python 能够通信,Python 需要启动一个本地通信服务,Demo 中 py/api.py 能够启动一个本地 HTTP 服务:

然后我们需要执行 Python 代码以启动服务,为了使 NodeJS 可以执行 Python,我们使用 pyinstaller 将 Python 打包成可执行文件:

Python 启动了本地 HTTP 服务后,Chromium 和 Node.js 就可以通过请求的方式,与 python 连接通信了:

简单来说三个步骤:

项目只是一个验证思路的 Demo,真的需要在项目上实践,还需要考虑以下几个点:

应该使用 RPC 通信而不是 HTTP 或者 WebSocket,Demo 使用 HTTP 只是搭建方便。实践中在建立连接、保持连接、异常重连都需要编写更多的逻辑来处理。为什么 Demo 没有使用 zerorpc? 这个库已经 4 年没有维护了,不兼容新版 NodeJS。

项目通过 pyinstaller 打包成可执行文件来调用 python。实际上其他能编译为可执行文件的语言也一样。还可以使用 WebAssembly 将其他语言编译成 .wasm,在 NodeJS 中引入执行。