树莓派3:Python3调用Web Service



好奇树莓派下Python3是如何调用Web Service的。搜了一圈发现不少人用的suds,那我也来跟个风吧。

sudo apt-get install python3-suds

为了模拟单位里生产环境的实际情况,分几种情况试验(Web Service是C#开发的):
1、输入输出都是简单类型;
2、输入简单类型,输出一个简单的实体类;
3、输入一个简单的实体类,输出一个简单类型;


实验结果如下:

场景一、选用一个单位MAS平台发送短信的方法测试。这个Web Service有个方法SendSMS,提供手机号和发送内容即可。

import sys
from suds.client import Client

url = "http://aaa/sms/service.asmx?wsdl"  # Web Service的URL
client = Client(url)

result = client.service.SendSMS('138****','Hello from Python @ 树莓派')
print(result)

几秒钟后就在我手机里收到了短信。可见调用有效,而且还是蛮直观易懂的。


简单叙述一下场景二和三用到的实体类和测试方法。怎么用C#编写Web Service不是本文重点,忽略不提。

这个实体类叫Demo,很简单,就一个int型的ID和一个string型的Name属性。

测试函数也很简单,

1、ReturnAsEntity函数需要提供ID和Name参数,返回Demo对象;
2、EntityAsArg函数需要提供Web Service中的Demo参数,以字符串形式返回ID和Name;

场景二、

import sys
from suds.client import Client

url = "http://aaa/bbb/service.asmx?wsdl"
client = Client(url)
result = client.service.ReturnAsEntity(1,'a')
print(str(result.ID) + '-> ' + result.Name)


很好理解,也符合C#的习惯。

场景三、关键在于如何构造一个WebSerivce认可的类。好在suds提供了一个非常简单的方法,请看示例:

import sys
from suds.client import Client

url = "http://aaa/bbb/service.asmx?wsdl"
client = Client(url)

c = client.factory.create('Demo')  # 就酱紫
c.ID = 1234
c.Name = "张三"

result = client.service.EntityAsArg(c)
print(result)

==================================================

补充第四种场景:输出是C#中定义的List<实体类>。调用ReturnAsList()得到一个List<Demo>。

场景四、经Python得到的返回值是ArrayOfDemo,需要自己再加工一下。
url = "http://aaa/bbb/service.asmx?wsdl"
client = Client(url)
result = client.service.ReturnAsList()

for i in range(0,len(results)):

    print(str(result.Demo[i].ID) + "::" + result.Demo[i].Name)




猜你喜欢

转载自blog.csdn.net/ki1381/article/details/78021646