You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python基于zeep调用SOAP API ping接口连接超时问题咨询

问题1:10.90.XXX.YY的来源

这个IP是从你配置的WSDL文件内容里解析出来的,不是写在你本地项目代码里的。
你在config.py里配置的WSDL_SALES是WSDL描述文件的拉取地址,Zeep初始化时会从这个地址下载WSDL文件,文件里的<soap:address location=""/>标签写的就是SOAP服务实际调用的端点地址,这个10.90的内网IP就是存在这个远程WSDL的标签里的,所以你本地搜不到。日志里的Forcing soap:address location to HTTPS警告也能佐证:Zeep检测到WSDL里的地址配置有问题,已经在强制修改协议为HTTPS,但不会修改内置的IP地址。

问题2:初始化成功但连接失败的原因和修复方案

原因

Zeep初始化WSDL只做了「下载WSDL文件、解析SOAP接口结构」这两步,没有实际发起业务请求,所以只要能正常拉取到WSDL文件就会提示初始化成功。你调用ping方法的时候才会真的向WSDL内置的10.90内网IP发请求,这个IP是外部公司的内网地址,你本地公网环境根本连通不了,所以才会报连接超时错误。

修复方案

  1. 手动覆盖SOAP服务端点地址
    不用WSDL内置的地址,手动指定实际可用的公网调用地址,修改externalcompany_myservice_api.py的init_wsdl方法即可,示例如下:
@staticmethod
def init_wsdl(type_wsdl):
    logging.info("S - initialise wsdl")
    settings = Settings(strict=False, xml_huge_tree=True)
    wsdl_externalcompany = Client(wsdl=type_wsdl, settings=settings)
    # 新增这行,手动覆盖WSDL内置的调用地址,和WSDL拉取地址去掉?WSDL后缀一致即可
    wsdl_externalcompany.service._binding_options['address'] = "https://externalcompanyapi.vendorcompany.com/WebServices/Api/SalesApi.asmx"
    logging.info("Created wsdl externalcompany connection")
    logging.info("E - initialise wsdl")
    return wsdl_externalcompany

如果上面的写法不生效,可使用Zeep更规范的create_service方法绑定自定义地址,绑定名和命名空间可以直接从你下载的WSDL文件开头部分查到。

  1. 排查网络连通性
    如果修改地址后还是超时,按优先级排查以下问题:
  • 访问外部公司的SOAP API是否需要连接专用VPN,本地开发环境先连VPN再测试
  • 你的公网IP是否在外部公司的接口白名单内,申请白名单权限
  • 本地防火墙/公司出口网关是否拦截了对应端口的出站请求
  1. 适配Tornado异步逻辑
    你当前用的Zeep Client是同步客户端,直接在Tornado协程里调用会阻塞IO循环,建议换成Zeep的AsyncClient,或者把同步调用丢到线程池中执行,避免影响服务性能。

内容的提问来源于stack exchange,提问作者Tms91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:06:08