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

创建Zeep Client时如何定义资源Base URL?解决WSDL解析404问题

解决Zeep解析WSDL时XSD资源路径错误的问题

方法1:自定义传输适配器指定Base URL

Zeep支持通过自定义Transport类修改资源请求路径,重写load方法即可将XSD的请求URL替换到正确目录。假设SuministroInformacion.xsd实际位于WSDL所在目录的上一级,代码示例如下:

import zeep
from zeep.transports import Transport
from requests import Session

class CustomTransport(Transport):
    def load(self, url):
        # 替换XSD的请求路径,移除URL中的/WSDL/部分
        if 'SuministroInformacion.xsd' in url:
            correct_url = url.replace('/WSDL/', '/')
            return super().load(correct_url)
        return super().load(url)

session = Session()
transport = CustomTransport(session=session)
client = zeep.Client(
    'https://sede.agenciatributaria.gob.es/static_files/Sede/Procedimiento_ayuda/G417/FicherosSuministros/V_1_1/WSDL/SuministroFactEmitidas.wsdl',
    transport=transport
)

方法2:本地下载文件修改路径

如果自定义传输逻辑太繁琐,可直接下载WSDL和对应XSD文件到本地,修改WSDL中的XSD引用路径后加载本地文件:

  1. 下载SuministroFactEmitidas.wsdl和SuministroInformacion.xsd到本地同一目录
  2. 编辑本地WSDL文件,将XSD的相对引用改为本地路径,例如:
    <xsd:import schemaLocation="./SuministroInformacion.xsd" .../>
    
  3. 用Zeep加载本地WSDL:
    import zeep
    client = zeep.Client('本地路径/local.wsdl')
    

方法3:手动修改WSDL内容后加载

先获取远程WSDL内容,修改其中的XSD引用URL,再手动创建Document实例初始化Zeep客户端:

import zeep
from zeep.wsdl import Document
import requests

# 获取远程WSDL内容
wsdl_url = 'https://sede.agenciatributaria.gob.es/static_files/Sede/Procedimiento_ayuda/G417/FicherosSuministros/V_1_1/WSDL/SuministroFactEmitidas.wsdl'
wsdl_content = requests.get(wsdl_url).text

# 修改XSD引用为正确的相对路径
corrected_wsdl = wsdl_content.replace(
    'SuministroInformacion.xsd',
    '../SuministroInformacion.xsd'
)

# 初始化Client
client = zeep.Client(wsdl=Document(zeep.helpers.parse_xml(corrected_wsdl), wsdl_url))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:12:22