将参数传递给SUDS客户端语句

2 投票
2 回答
3471 浏览
提问于 2025-04-15 18:01

我正在使用SUDS(类似SOAP)来测试WSDL文件。这些方法包含一些类型,这些类型又和其他功能相关联。我不太确定如何访问显示的类型中存储的变量。下面是一些示例代码:

from suds.client import Client
client=Client('http://eample.wsdl')
print client

响应是:

 Ports (1):
      (PTZ)
         Methods (4):
            AbsoluteMove(ns4:ReferenceToken ProfileToken, ns4:PTZVector Destination, ns4:PTZSpeed Speed, )
         Types (303):
            ns4:PTZSpeed

我能够访问这些功能。但是我找不到关于如何在SUDS中测试函数的任何文档。我想测试一下这些函数是否能正常工作,并检查它们的返回值。有没有人知道该怎么做?

我使用下面的命令来显示所有子函数。

client.factory.create('AbsoluteMove.PTZSpeed.Speed.PanTilt')

我主要的问题是如何将值传递给这些函数,并获取返回值。

我尝试过传递参数,但这些参数的属性存储在属性中。下面显示了我试图访问的参数结构的布局。

(AbsoluteMove){
    ProfileToken = None
    Destination = 
      (PTZVector){
         PanTilt = 
            (Vector2D){
               _x = ""
               _y = ""
               _space = ""
            }
         Zoom = 
            (Vector1D){
               _x = ""
               _space = ""
            }
      }
   Speed = 
      (PTZSpeed){
         PanTilt = 
            (Vector2D){
               _x = ""
               _y = ""
               _space = ""
            }
         Zoom = 
            (Vector1D){
               _x = ""
               _space = ""

这些参数比简单地输入值要复杂得多。

2 个回答

1

Client.factory.create 是用来创建你正在使用的服务内部对象类型的。如果你只是想调用一个方法(看起来你就是这样做的),那就直接调用它就可以了。

3

试着在服务上调用这个方法:

from suds.client import Client
client=Client('http://eample.wsdl')
res = client.service.AbsoluteMove(profile_token, destination, speed)
print res

你需要弄清楚在调用AbsoluteMove方法时,应该给那些参数传入什么值。

撰写回答