python调用webservice的两种方法

  • suds调用
  • requests调用

因为工作关系,长期对接各种三方的接口(视图,webservice,队列)。期间遇见了各种报错,也查阅了许多资料,特此记录webservice对接领域长期以来积累的经验,展示两种webservice对接的方式,以及异常排查的思路,一般能解决大部分wsdl符合要求的接口。


suds调用

suds是python的一个轻量型python拓展包,它可以快速的解析wsdl文件,结构化的返回接口的方法,调用方式及入参类型。

  • suds快速生成webservice的client调用
import suds
from suds.client import Client
url = "http://localhost/method?wsdl" #注意入参url为接口的wsdl地址
client = Client(url)
#输出接口的结构化描述
print client
----------------------------------
#调用接口方法,非常简单
result = client.service.dosomething('2019-01-01','2019-01-02')
print result

返回的client结构化描述如下图,methods类里即为接口的方法,入参方式,以及入参类型。

  • 有的接口入参形式是自定义格式,比如嵌套类型的字典,这时我们可以通过suds工厂来创建特殊入参类型
Input = client.factory.create('SomeNme')
Input.name = 'xxx'
Input.sex = 'xxx'
Input.date = datetime.now().strftime("%Y-%m-%d")
result=client.service.dosomething(Mheader)
  • 异常排查。通常建议开启日志,查看调用过程种传输的信息

1.查看调用过程中发生的soap报文和接收到的soap报文:

print client.last_sent() #发送
print client.last_received() #接收

2.调用失败时通常只有last_sent(),received多接收到none,此时可查看传输中的日志,输出到终端:

import sys
logger = logging.getLogger('suds.transport.http')
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler(sys.stdout))

3.查看整个调用过程中的日志信息,以排查解析xml时的not type错:

import sys
import logging
logger = logging.getLogger('suds')
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler(sys.stdout))

4.异常捕捉

try:client.service.xxx_func(*args, **kwargs)
except suds.WebFault,ex:print ex.fault        print ex.document

学习自:https://www.cnblogs.com/Tommy-Yu/p/5567091.html


requests调用

webservice通常的请求过程都是通过客户端向服务端发送soap数据包,以得到服务端发回的数据包在解析。所以此过程通常可以使用http的post请求来模拟。不会看wsdl也没关系,可以requests和soapui配合使用。
此方法可以针对于没有看过suds源码,以及使用suds调用接口时异常报错,查询stackoverflow也无法找到答案的情况

  • 核心代码为:
import requets
response = requests.post(self.url, headers=self.headers, data=send_data, verify=False)
#返回结果为
result = response.content

headers和data都可以通过suds的日志,或通过soapui模拟得到

python调用webservice相关推荐

  1. python调用webservice接口实例_python调用各种接口,webservice,c接口,com接口,socket协议方法...

    python调用webservice接口(SOAP) (2)调用示例: 需要先安装suds库:pip install suds from suds.client import Client #如果需要 ...

  2. Python 调用WebService接口出错-suds.transport.TransportError: HTTP Error 401: Unauthori

    使用Python调用WebService接口出现"suds.transport.TransportError: HTTP Error 401: Unauthorized"错误. 问 ...

  3. Python调用WebService服务 查询天气预报

    文章目录 问题描述 安装 初试 修复Schema 天气预报封装 参考文献 问题描述 Python调用Webservice服务,如WebXml的免费Web服务中的城市天气预报 安装 使用suds库的分支 ...

  4. Python调用webservice服务【suds-py3组件使用】

    先记录一下背景: 工作中一次与其他系统进行接口调用调试时,对方提供了webservice的一套服务文档和调用参数说明.what?webservice?没怎么用过,以为和API形式的调用差不多,但基于尊 ...

  5. python调用webservice接口实例_python调用webservice接口的实现

    使用suds这个第三方模块 from suds.client import Client url = 'http://ip:port/?wsdl' cilent=Client(url) print c ...

  6. python调用webservice接口实例_python发布webservice接口

    cd soaplib python setup.py install 2.服务端代码 import soaplib from soaplib.core.service import rpc, Defi ...

  7. python如何调用图片-python调用图片

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python本身也有识别图片转文字的框架,但是相比调用接口,识别的精度就略显不行 ...

  8. 使用suds-py3调用webservice WSDL接口

    使用suds-py3调用webservice WSDL接口 应用场景:我们需要通过Python调用webservice的接口,这需要使用到第三方库suds,这篇文章介绍使用suds-py3调用webs ...

  9. python使用suds来调用webservice

    对于python仅作为客户端调用webservice的情况,推荐使用suds库来完成,比起zsi,soapy之类,它可以说是相当轻量级,使用非常方便. 安装suds建议使用easy_insall来做. ...

最新文章

  1. 实验三:实现一个大素数生成算法
  2. layui表单提交使用form.on(‘submit(sub)‘,function (){}) 使用ajax请求时回调不执行的原因及解决方法
  3. string.Format字符串格式化说明(转)
  4. AppBoxFuture(四). 随需而变-Online Schema Change
  5. 支付宝「集五福」的阳谋
  6. 在VMWare Workstation 8.0.1中安装苹果MAC OS X Lion Part 2
  7. 干货分享|安全测试起航之旅 1
  8. 一文讲全了Python 类和对象内容
  9. html5图片比例控制,按比例调整图像大小以适应HTML5画布
  10. C++ delete删除动态分配的内存
  11. 监控zabbix 服务并在异常时python 邮件报警
  12. 听阿里P8聊完这个 SpringBoot 的项目,瞬间觉得自己白学了…
  13. access统计行数 vb_VB代码行数统计工具
  14. 电力拖动计算机系统考试,电力拖动自动控制系统__考试复习题.doc
  15. Switch函数的使用
  16. 抽象的数码艺术-分形艺术
  17. Linux重要命令-locat
  18. virtualbox打开嵌套虚拟化
  19. 去《挪威的森林》之后
  20. Android实现仿有道云笔记头像背景(模糊效果)

热门文章

  1. haxm intel庐_如何开启Intel HAXM功能
  2. 【LeetCode】528. Random Pick with Weight 解题报告(Python)
  3. Android LiveData crash: Cannot add the same observer with different lifecycles
  4. 统计推断第三章20200601
  5. 一对一直播源码开发,一对一直播系统开发
  6. 做最好的日期控件,My97 DatePicker
  7. 金融时间序列分析——对收益率序列平稳化处理
  8. 56岁潘石屹下定决心学Python,60多岁程序语言之父们还在敲代码,你还敢懈怠吗?
  9. WTK 2.5 安装详解(Windows XP)
  10. 安卓屏幕朗读app_认真分享4个让你偷偷成长的宝藏App