我是 zeep 的新手。我有以下效果很好:
import zeep
from zeep.cache import SqliteCache
from zeep.transports import Transport
wsdl = 'https://emaapitest.eset.com/Services/v2015_1/MSPService.svc?singleWsdl'
transport = Transport(cache=SqliteCache())
client = zeep.Client(wsdl=wsdl, transport=transport )
Run Code Online (Sandbox Code Playgroud)
有了上面的内容,我可以将定义的 API 用于大多数调用。例如:
data = {'Username': 'xxxx123', 'Password': 'Secretpassword'}
loginreq = client.service.Login(data)
data = {'LoginID': 'xxxyyy', 'Token': 'gregrwevds543', 'CompanyID': 123}
company_details = client.service.GetCompanyDetails(data)
Run Code Online (Sandbox Code Playgroud)
这一切都很好。但是,对 UpdateSite 的 API 调用需要不同的格式,如下所示:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:msp="http://schemas.datacontract.org/2004/07/MSPApi.Services.v2015_1.Requests">
<soapenv:Header/>
<soapenv:Body>
<tem:UpdateSite>
<tem:request>
<msp:LoginID>123abc</msp:LoginID>
<msp:Token>hpjzncpduqyfreyakcsdilqv</msp:Token>
<msp:LicenseRequests>
<LicenseRequest xmlns:d7="http://schemas.datacontract.org/2004/07/MSPApi.Services.v2015_1.Requests"
i:type="d7:LicenseCreateRequest" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MSPApi.Services.v2015_1.ViewModels">
<d7:ProductCode>112</d7:ProductCode>
<d7:Quantity>3</d7:Quantity>
<d7:Trial>false</d7:Trial>
</LicenseRequest>
</msp:LicenseRequests>
<msp:SiteID>123456</msp:SiteID>
</tem:request>
</tem:UpdateSite>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
那就是我需要更改 LicenseRequest …