[英]Zeep with namespace(?) variables
我有一個 XML/WCF API,我需要針對它實施某些操作。 API 客戶端庫在 Windows 中僅作為 c# 提供,我們公司不提供 c# 或 Windows。 我現在正在試驗 Python 和 zeep。 如果有人感興趣,該 api 是 Symmetry 訪問控制系統 API。
我可以連接到服務器並讀取 wsdl 結構。 這有效:
URL='https://localhost/smsXMLWebService/SMSXMLWebService.svc?singleWsdl'
URL2='https://localhost/smsXMLWebService/smsXMLWebService.svc'
session = Session()
session.verify = False
transport = Transport(session=session)
self.client = zeep.Client(URL, transport=transport)
self.service = self.client.create_service('{http://tempuri.org/}WSHttpBinding_ISMSXMLWebService', URL2)
現在,從那時起的所有內容都需要登錄平台。 在示例 C# 代碼中,這是按如下方式完成的:
G4TAPI = new SMSXMLWebServiceClient();
G4TAPI.ClientCredentials.UserName.UserName = txtUserName.Text
G4TAPI.ClientCredentials.UserName.Password = txtPassword.Text.ToLower();
G4TAPI.G4TLogin();
我的self.service
現在有 G4TLogin() 調用,當我 wireshark 流量時它似乎試圖連接。 但是我該如何設置用戶名和密碼,因為它們沒有作為參數提供給 G4TLogin() 方法?
這不起作用:
self.service.ClientCredentials.UserName.UserName = "api"
這非常超出我的舒適范圍,我可能在這里使用了不正確的術語。 有任何想法嗎?
錯誤信息是
AttributeError: Service has no operation 'ClientCredentials'
使用 Zeep 時確保研究 WSDL URL 中的名稱空間,使用
python -mzeep "YourWsdlUrlGoesHere"
獲取參數並從中創建一個 Python 字典(在我的情況下,面向 C#,包括字典中的用戶名和密碼)請注意,可能需要像我的情況一樣創建嵌套字典。
from requests import Session
from requests.auth import HTTPBasicAuth, HTTPDigestAuth
from zeep import Client
from zeep.transports import Transport
request = { "Credential":{"Username": "yourusername",
"Password": "yourpassword"},
"RN": "150147119"
}
session = Session()
client = Client('http://your url and wsdl../Invoice.svc?Wsdl',transport=Transport(session=session))
r = client.service.NameOfYourService(request)
print(r)
不要以 Zeep 正式格式傳遞用戶名和密碼。 通過字典對我有用。 在我的例子中,WSDL 建議用戶和密碼在憑據中,一個字符串在 RN 中傳遞,最后全部在一個變量中傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.