前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用suds-py3调用webservice WSDL接口

使用suds-py3调用webservice WSDL接口

作者头像
Python碎片公众号
发布2021-02-26 14:25:24
2.3K0
发布2021-02-26 14:25:24
举报
文章被收录于专栏:Python碎片公众号的专栏

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

一、安装suds

如果在python2环境下安装suds,需要先安装client,命令如下:

代码语言:javascript
复制
# python2安装命令
pip install client
pip install suds

在python3环境下直接安装suds-py3,即可使用,命令如下:

代码语言:javascript
复制
# python3安装命令
pip install suds-py3

二、使用suds连接webservice

这里有两个公网的webservice可以供测试使用.

查看QQ号码登录状态的webservice: http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl

查看手机号码归属地的webservice: http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL

本文在Python3下演示,用查手机号码归属地的公网webservice做测试:

代码语言:javascript
复制
from suds.client import Client
 
 
url = 'http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL'
client = Client(url)
print(client)

从suds库的client模块中导入Client类,创建Client对象来连接webservice的url,只有连接通了,才能通过连接对象client调用接口.

注意:url必须以 "?wsdl" 结尾才能访问(不区分大小写),我们工作中的url可能是由其他语言的程序员提供的,他们使用时可能没有结尾的"?wsdl",使用Python调用时要自己加上.

运行结果:

print输出了client对象,可以获得webservice的相关信息:

1.可以点击访问: http://WebXml.com.cn/ (访问提供当前Web Service的网站http://WebXml.com.cn/,这个网站提供了一些公开的Web Service, 如:手机号归属地查询,城市天气预报,验证码图片等...),在网站点击''WEB服务'',再点"显示全部Web Serbvces",复制WSDL后的url,即可找到该网站提供的所有Web Service服务url,上面的两个url即从这里获取到的.

注意:如果您调用的是自己的url,这里就是为您提供Web Service的网站,而不是http://WebXml.com.cn/

2.重点从webservice信息里面找到Methods,Methods下列出的方法即为可以调用的接口,调用语法: client.service.方法名(参数)

三、调用webservice中的任务,返回数据

1.从client的信息中可以看到有两个Method,如:

getDatabaseInfo()

getMobileCodeInfo(xs:string mobileCode, xs:string userID, )

注意:在传递参数时,要根据webservice中定义的参数类型,是否必传等要求,传递符合条件的参数,如果需要传递json类型的数据,键和值均需转成字符串,可使用json.dumps()将复杂数据(如列表字典多层嵌套的数据)转成字符串。

2.通过client对象调用每个接口方法,传入符合WSDL定义的参数

调用method:

getDatabaseInfo()不需要传参数,直接client.service.getDatabaseInfo()调用即可

getMobileCodeInfo()需要两个字符串参数mobileCode和userID, mobileCode是必填, userID可以不填,调用: client.service.getMobileCodeInfo(mobileCode=1802584****)或 client.service.getMobileCodeInfo(1802584****)

调用接口代码:

代码语言:javascript
复制
from suds.client import Client
 
 
url = 'http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL'
client = Client(url)
# print(client)
print(client.service.getMobileCodeInfo(mobileCode=1802584****))

3.返回WSDL中定义的Response数据,可查看接口WSDL中的返回参数定义,查看接口是否调用成功,返回数据信息如下:

有些号码可能会提示:没有此号码记录,这是网站上没有更新数据,您(在您的通讯录中)换一个号码测试即可

现在,已经可以通过suds调用webservice了,您只要找到您自己要调的url,把url换成自己的url即可

四、WSDL介绍

WSDL是网络服务描述语言 (Web Services Description Language),是使用XML写的用于描述Web Services,以及如何访问 Web Services的文档,我们可以简单的这样理解:WSDL的作用类似于接口文档,告诉调用者有哪些接口,需要哪些参数,参数是什么类型,返回什么样的值.

如果需要更理解WSDL,可以自己找一下教程,同时再看一下XML和SOAP的相关内容.

直接通过浏览器访问上面的WSDL url显示信息如下:

学了WSDL的知识,就可以看到上面WSDL的信息就是对Web Service的接口的描述.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 碎片 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档