python 调用 java的web service的接口 使用zeep 无网络的问题

项目中需要用到 python 调用 java的web service的接口
接口是"http://xxx?wsdl"
我先尝试了suds接口,发现报下列错误
在这里插入图片描述
因为没有网络所以访问不到http://schemas.xmlsoap.org/soap/encoding/这个地址,所以就在网上搜索答案,suds太老旧了,网上有用的信息很少,大部分答案都是 imp = Import(‘http://www.w3.org/2001/XMLSchema’,
location=‘http://www.w3.org/2001/XMLSchema.xsd’)
imp.filter.add(‘xxx’)
Client(wsdl_url,doctor = ImportDoctor(imp))
示例代码是可以解决的,但是放在没有网络的生产环境还是不行。
官方文档中https://wiki.python.org/moin/WebServices还提出zeep。
我发现zeep也是可以解决问题的,所以就转投了zeep的怀抱。
结果发现zeep也是会报网络问题

在这里插入图片描述
好在这个用的人比较多,网络上找到了答案,最终解决了问题,重写Transport类,当要获取外部网络url时,读取服务器上的xml文件。

from zeep.transports import Transport

class CustomTransport(Transport):
    def load(self, url):
        # Custom URL overriding to local file storage
        if url and url == "http://schemas.xmlsoap.org/soap/encoding/":
            url = '/xxxxx.xml'

        # Call zeep.transports.Transport's load()
        return super(CustomTransport, self).load(url)
from requests import Session
from zeep import Client
    wsdl_url='http://xxxx?wsdl'
    session = Session()
    client = Client(wsdl_url, transport=CustomTransport(session=session))
    params=json.dumps(body_data)
    client.service.xxxx(body_data)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值