用肥皂水写SOAP的python客户端

时间:2009-09-25 11:36:24

标签: python soap https suds

我想将perl SOAP客户端转换为python SOAP客户端。 perl客户端初始化为

$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 :(得分:3)

urllib2手动构造Request对象时,

suds模块不会自动添加Content-Length(POST方法所需)头。您必须修补suds,可能是suds.transport.HttpTransport.open()方法或suds.transport.Request类。

答案 1 :(得分: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')

答案 2 :(得分:0)

你应该在suds的邮件列表中问这个问题。该库正在开发中,是开源的,作者非常希望从用户那里获得反馈。

您的代码看起来很好,这可能是wsdl本身或suds库的错误,因此我建议您直接询问作者(在与其他wsdl检查过您的安装是否正确之后)。