簡體   English   中英

Zeep 命名空間(?)變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM