先记录一下背景:
工作中一次与其他系统进行接口调用调试时,对方提供了webservice的一套服务文档和调用参数说明。what?webservice?没怎么用过,以为和API形式的调用差不多,但基于尊重,还是先百度了一下,不看不知道,一看吓一跳!
百度百科:
Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。
案例说明【踩坑步骤】:
1.对接方给的文档中简要概述分为两部分:url+参数 【惊呆了·!·】
2.一窍不通的自己,用requests的方式尝试post进行请求,发现异想天开
3.研究webservice的文档,多为xml,wsdl等的说明,不太懂这些真看得不是很明白
4.百度一些网友的博客,使用suds的居多,也有用requests的三下五除二整出来的,看得不是很明白。跟着网友的脚步尝试,版本问题、参数格式问题、调用方式问题等层出不穷,果然中国特色社会主义道路是自己摸索的,照搬洋人的制度是不会成功的~于是我找到了suds的官方文档,先学文档。
文档顺便附上: https://suds-py3.readthedocs.io/en/stable/.
简单说明一下,调用webservice的服务时,主要是通过suds的client客户端来完成的。先对接口进行client = Client(url) 处理,然后使用client.service.方法(参数)进行调用即可。
下面放代码:
import json,requests,random,string
from suds.client import Client
#注意,有些文档里接口可能没把?wsdl写进去,但是调用时是需要有这个参数的
url = "http://xxxxxxxxxxxx/webservices/IncidentService?wsdl"
#随机数
ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 30))
incidentContent = str({
"SOURCEID": "86",
"SOURCECASEID": ran_str,
"OWNER": "xxxxx",
"TITLE": "测试测试测试测试",
"CONTENT": "备注测试备注测试201606142",
"CHANNELID": "176",
"system": "xxxx",
"happentime": "2021-08-25 15:00:00",
"affectarea": "测试字段"
})
client = Client(url)
#print(client)
try:
result = client.service.addIncidents(incidentContent)
print(result)
except Exception as e:
print(e)
incidentContent为参数字段,里面的内容根据接口来定。
addIncidents为方法名,如果不确认有哪些方法,可以从client中获取,方式如下方代码片:
client = Client(url)
print(client) #打印该结果,来获取全部方法
另外,参数的格式需要根据接口来去确认,是str字符串,还是xml,还是json等
xml的话又需要去做解析,格式转换,我这边没去试。json当然就比较简单了。案例中使用的string字符串格式,是因为接口要求就是这样,当然这样也省事。
就先记录到这啦