python无法访问suds方法

2024-07-03 06:55:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用python中的SUDS访问soapapi

from suds.client import Client
def initialize():
    url = 'http://uuuuuuuuuuuuuuu.com/wewewe/WsNBI?wsdl'
    username = 'xxxxx'
    password = 'ppppppp'
    client = Client(url)
    print client
    result = client.service.Login(nbiLogin NBILogin(username,password),)
    print result

我不能调用Login方法,你知道我该怎么做吗?在

这些是查询返回的方法。。。在

^{pr2}$

更新:

#!/usr/bin/env python

from suds.client import Client

def initialize():
    url = 'http://xxxxxxx/xxxx/WsNBI?wsdl'
    username = 'xxxxx'
    password = 'pppppp'
    client = Client(url)
    login = client.factory.create("ns0:NBILogin")
    print login
    ws = login.nbiLogin(userName=username, password = password)
    result = client.service.Login(ws)
    print result
def main():
    initialize()

if __name__ == "__main__":
    main()


[root@server scripts]# ./flex_soap.py
(nbiLogin){
   UserName = None
   Password = None
 }
Traceback (most recent call last):
  File "./flex_soap.py", line 19, in ?
    main()
  File "./flex_soap.py", line 16, in main
    flexMaster()
  File "./flex_soap.py", line 12, in flexMaster
    ws = login.nbiLogin(userName=username, password = password)
AttributeError: nbiLogin instance has no attribute 'nbiLogin'

更新:

#!/usr/bin/env python

from suds.client import Client

def initialize():
    url = 'http://xxxxx/intune/WsNBI?wsdl'
    username = 'uuuuu'
    password = 'pppp'
    client = Client(url)
    print client
    login = client.factory.create("ns0:NBILogin")
    print login
    login.UserName = username
    login.Password = password
    result = client.service.Login(login)
    print result
    event = client.factory.create("ns0:EventReqData")
    print event
def main():
    initialize()

if __name__ == "__main__":
    main()

[root@server scripts]# ./flex_soap.py

(nbiLogin){
   UserName = None
   Password = None
 }
(authenticateResult){
   Success = True
   Session =
      (nbiSession){
         Id = "0eda1622-473c-4dd6-b68e-4ff3c1ee27f6"
      }
 }
(eventReqData){
   EventType =
      (eventType){
         value = None
      }
   SerialNumbers =
      (SerialNumbers){
         SerialNumber[] = <empty>
      }
 }

你知道我怎么得到这个方法吗

GetEvent(nbiSession NBISession, eventReqData EventReqData, )

Tags: pyclienturlmaindefusernameloginpassword
1条回答
网友
1楼 · 发布于 2024-07-03 06:55:46

您的代码不是有效的Python。Login(nbiLogin NBILogin, )表示有一个方法Login,它接受NBILogin类型的单个参数。它不是你应该使用的字面语法。试试这样的方法:

 login = client.factory.create("ns0:NBILogin")
 login.UserName = username 
 login.Password = password 
 result = client.service.Login(login)

此输出:

^{pr2}$

意思是result.Success == True and result.Session.Id == "0eda1622-473c-4dd6-b68e-4ff3c1ee27f6"。在

GetEvent(nbiSession NBISession, eventReqData EventReqData, )意味着您需要两个类型为NBISessionEventReqData的参数。在

您可以从result获得的会话。要生成EventReqData,请执行以下操作:

(eventReqData){
   EventType =
      (eventType){
         value = None
      }
   SerialNumbers =
      (SerialNumbers){
         SerialNumber[] = <empty>
      }
 }

您需要创建EventTypeSerialNumbers

event_req_data = client.factory.create("ns0:EventReqData")
event_req_data.EventType = "put some appropriate event type here"
event_req_data.SerialNumbers = [10, 51, 1] # some serial numbers 

上面假设序列号是整数,否则每个SerialNumber与所有其他对象一样通过client.factory.create()创建:

sns = event_req_data.SerialNumbers = client.factory.create('ns0:SerialNumbers')
for item in [10, 51, 1]:
    ns = client.factory.create('ns0:SerialNumber')
    ns.value = item
    sns.SerialNumber.append(ns)

我在清单中没有看到SerialNumbersSerialNumber类型,所以它可能会失败。在

如果sud本身不能从字符串转换为EventType,那么可以使用client.factory.create()显式地创建{}:

event_type = client.factory.create("ns0:EventType")
event_type.value = "put some appropriate event type here"
event_req_data.EventType = event_type

打电话:

event = client.service.GetEvent(login.Session, event_req_data)

相关问题 更多 >