使用suds编写SOAP的Python客户端

1 投票
3 回答
6126 浏览
提问于 2025-04-15 14:35

我想把一个perl的SOAP客户端转换成python的SOAP客户端。

$url = 'https://host:port/cgi-devel/Service.cgi';
$uri = 'https://host/Service';

my $soap = SOAP::Lite 
    -> uri($uri)
    -> proxy($url);

我尝试在python 2.4.2中用suds 0.3.6来实现这个,代码是这样的:

from suds.client import Client

url="https://host:port/cgi-devel/Service.cgi" 
client=Client(url)

但是当我运行这个python脚本时,出现了这个错误:

suds.transport.TransportError: HTTP Error 411: Length Required

这是因为https的问题吗?或者可能是什么其他问题呢?任何帮助都会非常感谢!

3 个回答

0

你应该在suds的邮件列表里问这个问题。这个库还在开发中,是开源的,作者们非常希望能听到用户的反馈。

你的代码看起来没问题,这可能是wsdl本身的错误,也可能是suds库的问题,所以我建议你直接问作者(在确认你的安装是正确的之后,可以先检查其他的wsdl)。

3

我也遇到了同样的错误,然后我换成了使用本地的WSDL文件,这样就解决了问题:

import suds
wsdl = 'file:///tmp/my.wsdl'
client = suds.client.Client(wsdl, username='lbuser', password='lbpass', location='https://path.to.our.loadbalancer:9090/soap')
3

urllib2 模块在你手动创建请求对象的时候,不会自动添加一个叫做 Content-Length 的头信息,这个信息在使用 POST 方法时是必须的。而 suds 模块是会自动处理这个问题的。如果你想让 suds 也能正常工作,你可能需要修改一下 suds.transport.HttpTransport.open() 方法或者 suds.transport.Request 类。

撰写回答