使用库:subs
soap服务信息:
网址:http://mobile.bjmemc.com.cn/AirService/Service.asmx
功能:使用其中的GetData服务获取北京各个地点的空气情况
GetData服务的请求示例:
POST /AirService/Service.asmx HTTP/1.1 Host: mobile.bjmemc.com.cn Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://tempuri.org/GetData" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <MySoapHeader xmlns="http://tempuri.org/"> <UserName>string</UserName> <PassWord>string</PassWord> </MySoapHeader> </soap:Header> <soap:Body> <GetData xmlns="http://tempuri.org/"> <DevID>string</DevID> <DevType>string</DevType> </GetData> </soap:Body> </soap:Envelope>
Python代码的实现:
# -*- coding:UTF-8 -*- from suds.client import Client def getAirInfo(): url = 'http://mobile.bjmemc.com.cn/AirService/Service.asmx?wsdl' #一般都是网址后面加个?wsdl,你可以打开看一下,是一堆xml文件 client = Client(url) #创建一个客户端 header = client.factory.create('MySoapHeader') #请求头,名字按他给的xml header.UserName = '******' #请求头里的用户名和密码,这是个付费服务 header.PassWord = '******' client.set_options(soapheaders=[header,]) #将封装好的请求头加入到client中 result = client.service.GetData() #调用GetData()服务,获取返回数据,返回一个text文本 print result