使用suds编写SOAP的Python客户端
我想把一个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
类。