python調用基於soap 的webservice


Python 調用webservice服務

python 可以作為webservice的客戶端以及服務端,本文主要是以講述,python作為客戶端怎么來調用 基於soap 的webservice 

服務端可以參考:  點擊進入鏈接

本文的代碼 是python3.X版本

 

前置條件

  1. Python訪問webservice接口用到的工具包是suds,但是由於該工具包沒有在維護了,本文使用suds的分支項目suds-community
  2. 安裝suds-communitypip install suds-community 博主測試過 suds-py3包  以及suds-jurko 這三個包都可以用
  3. 免費的webservice網站,http://www.webxml.com.cn/zh_cn/web_services.aspx

准備好前置條件后

from suds.client import Client 
# 連接到webservice服務,獲取查詢天氣服務方法 
client=Client('http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl') 
print(client)

#### 一定要注意URL后一定要加  ?wsdl 

 

如果連接沒問題,就可以直接調用webservice中的方法  , 詳細的訪問名以及調用的方法可以直接 URL中查看

調用方法如下:

# 查詢手機號碼歸屬地
print(client.service.getMobileCodeInfo("18300000000",""))
# 18300000000:廣東 深圳 廣東移動全球通卡

 

經常會出現的問題集合

配置以下幾點可以解決95%左右的問題:

示例常見的錯誤:

 

 

 

 

以下是常見的兩種錯誤方式:

 from suds.client import Client
from suds.xsd.doctor import ImportDoctor, Import from suds.xsd import sxbasic sxbasic.Import.bind('http://www.w3.org/2001/XMLSchema', 'file:' + str(BASE_DIR) + '/runCIA/suds/XMLSchema.xml')
imp
= Import('http://www.w3.org/2001/XMLSchema')
# 添加過濾空間 imp.filter.add(
'http://www.innolux.com/InnoLux/WebServices') doctor = ImportDoctor(imp) verification_url = 'http://xxxxxxxxxxx/xxxxxx/xxxxxxxx.asmx?wsdl' verification_client = Client(verification_url, doctor=doctor)

觸發suds.TypeNotFound: Type not found: '(schema, http://www.w3.org/2001/XMLSchema, )錯誤,

錯誤的原因是沒有正確的引入命名空間。

解決辦法,用瀏覽器打開webservice服務鏈接(打開以上代碼的URL 地址),找到webservice服務中的targetNamespace

 

將它的只添加到過濾的命名空間就能解決問題。

但是一旦使用這個方法。速度會變得很慢, 解決速度變慢以下方式可以解決這個問題

 

觸發 urllib.error.URLError: <urlopen error [WinError 10060] 連線嘗試失敗,因為連線對象有一段時間並未正確回應,或是連線建立失敗,因為連線的主機無法回應。>

是因為 本機尋找XMLSchema.xsd比較慢

1.下載http://www.w3.org/2001/XMLSchema.xsdhttp://www.w3.org/2001/xml.xsd

分別保存為XMLSchema.xml 和 xml.xml (改文件后綴)放在本機項目中下

 

1.添加sxbasic.Import.bind
sxbasic.Import.bind('http://www.w3.org/2001/XMLSchema', 'file:文件目錄地址/XMLSchema.xml')
2.在XMLSchema.xml的 91行

<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd">中schemaLocation 改為本地xml路徑

demo:

 

 

 

注******   代碼中 BASE_DIR 是django 項目中配置的根目錄

以上都配置后 %95 的webservice 都可以訪問,還可能是內部網,也有可能是webserver 你無權訪問,有其他問題可以私下聯系博主  : 郵箱  suwhatsu@163.com

 


免責聲明!

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



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