python讀取webservice


網上最多的是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的根標簽中可以看到。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM