在SUDS库中更改Web服务URL

时间:2009-11-03 22:31:35

标签: python soap suds

使用SUDS SOAP客户端如何指定Web服务URL。我可以清楚地看到在客户端构造函数中指定了WSDL路径,但是如果我不想更改Web服务URL呢?

3 个答案:

答案 0 :(得分:4)

Suds支持WSDL with multiple services or multiple ports(或两者),并且没有关于您正在使用的内容的任何详细信息,我只是猜测这是您正在寻找的。如果您提供了更多详细信息,例如您的Client实例的内容,则此问题会更容易回答。

成功构建Client后,您可以print查看可用的服务,方法,端口和类型。

以下示例直接来自suds文档。

来自肥皂网站的例子:

from suds.client import Client
url = 'http://www.thomas-bayer.com/axis2/services/BLZService?wsdl'
client = Client(url) 
print client

输出:

Suds - version: 0.3.7 build: (beta) R550-20090820

Service (BLZService) tns="http://thomas-bayer.com/blz/"
   Prefixes (1)
     ns0 = "http://thomas-bayer.com/blz/"
   Ports (2):
     (soap)
       Methods (1):
         getBank(xs:string blz, )
     (soap12)
       Methods (1):
         getBank(xs:string blz, )
   Types (5):
      getBankType
      getBankResponseType
      getBankType
      getBankResponseType
      detailsType

Service (OtherBLZService) tns="http://thomas-bayer.com/blz/"
   Prefixes (1)
     ns0 = "http://thomas-bayer.com/blz/"
   Ports (2):
     (soap)
       Methods (1):
         getBank(xs:string blz, )
     (soap12)
       Methods (1):
         getBank(xs:string blz, )
   Types (5):
      getBankType
      getBankResponseType
      getBankType
      getBankResponseType
      detailsType

每个服务都可以通过多种方式访问​​,但这里的每个服务都有一个不同的端口:

## service: BLZService, port: soap12, method: getBank
client.service['BLZService']['soap12'].getBank()
## service: OtherBLZService, port: soap, method: getBank
client.service['OtherBLZService']['soap'].getBank()

这是你正在使用的那种东西吗?如果是这样,请访问他们的文档,我认为您会发现这些文档已经足够了。如果没有,请考虑尽可能详细地添加您的问题,以便我们与您合作!

答案 1 :(得分:2)

您可以通过两种方法将客户端指向不同的端点:

1)client.set_options(location ='http://path/to/your/wsdl') - 或 - 2)使用客户端的clone()方法。然后再次使用set_options()。它与上面的#1非常相似,但你最终会使用两个客户端,而不是一个。

后一种方法是一种创建客户端对象的轻量级克隆的简洁方法 - 它们将共享已解析的wsdl,并且只会通过set_options()设置它们的选项。

我使用这两种方法并且它们都能很好地工作。

-Matt

答案 2 :(得分:1)

我认为你必须为每个不同的URL创建一个新的Client对象。