網上最多的是suds模塊,這里也使用suds。
1、安裝:
和所有python模塊安裝一樣,可以使用easy_install或pip在線安裝,也可以下載離線安裝.
https://pypi.python.org/pypi/suds/
2、簡單入門:
import logging from suds.client import Client from suds.xsd.doctor import ImportDoctor,Import
#日志,suds下的各個python模塊或者說python文件大多都使用了logging模塊進行日志記錄,我們只需要設置好日志的等級、格式、路徑等,就可以進行對應模塊的日志記錄了
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='/tmp/test.log',
filemode='w')
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG) #Import和DoctorImport是提供wsdl中缺少的import標簽的 imp = Import("http://www.w3.org/2001/XMLSchema",location="http://www.w3.org/2001/XMLSchema.xsd") imp.filter.add("http://WebXml.com.cn/") doctor=ImportDoctor(imp) url ='http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx?wsdl' client = Client(url,doctor=doctor) r = client.service.getStationName()
3、WSDL
wsdl使用xml文件格式,xsd規范對外提供webservice接口。suds模塊很大一部分是對於wsdl對應的xml文件的解析。所以需要對wsdl有個系統的了解。
http://www.phpstudy.net/e/wsdl/
4、suds使用中的問題
suds將xml中的element、complexType等等都定義成了類,新建Client對象時會解析wsdl的xml文檔。將文檔中的types,types下的element,import,service等全部轉換成python中的對象。然后是使用service使用對應服務方法。
suds使用時出現錯誤:Type not found: '(schema, http://www.w3.org/2001/XMLSchema, )'
只是因為需要訪問的wsdl中使用到了 http://www.w3.org/2001/XMLSchema中定義的對象,但是wsdl中沒有使用import標簽將 http://www.w3.org/2001/XMLSchema命名空間引入,引起錯誤。
解決辦法即添加如上添加doctor初始化選項。這里可能是使用其他的命名空間,使用同一的方法添加,可以使用doctor.add(imp)添加多個Import對象(多個命名空間)。
imp.filter.add("")添加的是當前wsdl的targetNamespace,在wsdl的根標簽中可以看到。