SOAP 协议及 Python 调用

1. 什么是 SOAP 协议

 SOAP 是一种简单的基于 XML 的协议,它底层通过 HTTP 来交换信息。SOAP 的优点是可以传递结构化的数据。

  客户生成的 SOAP 请求会被嵌入在一个 HTTP POST 请求中,发送到 Web 服务器。Web 服务器再把这些请求转发给 Web service 请求处理器,它解析收到的 SOAP 请求,调用 Web service,处理后再生成相应的 SOAP 应答。Web 服务器得到 SOAP 应答后,会再通过 HTTP 应答的方式把它送回到客户端。

  从 HTTP 协议的角度看,最基本的四种操作是 GET(查),POST(改),PUT(增),DELETE(删),我们用的比较多的是 POST 和 GET 方式。而 SOAP 可视为 POST 的一个专用版本,遵循一种特殊的 XML 消息格式。

  最常见的场景是:Server 端使用了 SOAP 协议,而 Client 端也必须遵从该协议才能交互,本文介绍一下,如何在 Client 端使用 SOAP 协议,以及如何配置 SOAP 测试环境。

2. 什么是 WSDL

  网络服务描述语言,Web Services Description Language) 是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。

  简单的说,它就是一个 Web Services 的使用说明书。来看一个实例:

http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

这是一个查询电话号码的接口描述,WSDL 教程详见参考部分。

3. Python 使用 SOAP 协议

(1) 安装支持库

  如果开发服务端,可使用 soaplib,SOAPpy 等库,本文主要介绍开发客户端,使用 suds 库。

  在 python2 中使用以下命令安装:

1
$ sudo pip install suds

  在 python3 中使用以下命令安装:

1
$ sudo pip install suds-py3

(2) 程序调用

1
2
3
4
from suds.client import Client

client = Client('http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl')
print(client.service.getMobileCodeInfo('13581855347',''))

  这是一个查询电话号码所在地的程序。

4. 搭建测试环境 SOAPUI+WSDL

 SoapUI 是专门针对 webservice 接口的测试工具,它即可以模拟 Client,也可以模拟 Server。下面是在 Ubuntu 上安装 SOAPUI 的方法。

(1) 下载 SOAPUI

https://www.soapui.org/downloads/latest-release.html

(2) 安装

1
2
$ sudo ./SoapUI-x64-5.4.0.sh
$ sudo SoapUI-5.4.0 # 运行

(3) 作为 Server 端测试

  在 Projects 上点右键,选择 New SOAP Project,Project Name 启一个名字,Initial WSDL 中填写 http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl 新建一个 Project,当然也可以参考例子编写自己的接口。

  在 MobileCodeWSSoap12 上,点右键 Generate SOAP Mock Service,按提示建立 Service,然后点绿色键头运行。

  此时,打开 http://127.0.0.1:8088/,能看到 Service 已被启动,把上面 python 上的测试的 IP 换成本机地址,也可正常运行了。

5. 参考

(1) suds 调用 webserive 时出现 suds.TypeNotFound 错误

http://www.mamicode.com/info-detail-2324352.html

(2) WSDL 教程

http://www.w3school.com.cn/wsdl/