在系统设置里对接第三方服务时,常会遇到要求用 SOAP 协议调用接口的情况。比如公司内部的 OA 系统要查员工信息,或者老版本 ERP 提供的用户认证服务,都还跑着 SOAP 接口。它不像 REST 那么轻量,但胜在规范、稳定,尤其适合企业级系统间交互。
先看一个真实能跑的 SOAP 请求例子
假设有个天气查询服务,WSDL 地址是 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL,我们要查北京的天气。用 Python 的 zeep 库最省事:
from zeep import Client
# 加载 WSDL,自动生成请求结构
client = Client('http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL')
# 调用 getWeatherbyCityName 方法,传城市名
result = client.service.getWeatherbyCityName(cityName='北京')
print(result)运行后会返回一个包含气温、天气状况、风向等字段的字典。如果你没装 zeep,终端执行 pip install zeep 就行。
手动拼 SOAP XML 也不难
有些环境不支持高级库(比如老旧的 Windows Server 上只有 PowerShell),就得自己构造 XML 请求。下面是一个标准的 POST 请求体示例:
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getWeatherbyCityName xmlns="http://WebXml.com.cn/">
<cityName>上海</cityName>
</getWeatherbyCityName>
</soap:Body>
</soap:Envelope>发请求时注意 Header 必须带上:Content-Type: text/xml; charset=utf-8SOAPAction: "http://WebXml.com.cn/getWeatherbyCityName"
Windows 系统设置里怎么测?
在「系统设置」→「网络与 Internet」→「代理」或「高级网络设置」里,有时需要配置 SOAP 接口的访问权限。比如内网调用某台 IIS 托管的 ASMX 服务,得确认防火墙放行了 80 或 443 端口,且目标服务器开启了 HTTP/HTTPS 协议支持。如果提示“无法连接到远程服务器”,先用浏览器直接打开 WSDL 地址——能正常显示 XML 内容,说明服务本身是通的。
另外,部分企业安全策略会禁用 TLS 1.0,而老 SOAP 服务只支持这个版本,这时就得在系统设置里启用旧协议:打开「控制面板 → Internet 选项 → 高级」,勾选「使用 TLS 1.0」。