2013-02-15 24 views
3

我试图将我的Perl SOAP通信应用程序移植到当前的Python等价物上,但似乎无法通过urllib2通过suds抛出的此错误。我工作的Perl脚本肥皂是:将perl soap应用程序移植到python

use myStub; 
$ENV{HTTPS_PKCS12_FILE} = '/path/to/certificate'; 
$ENV{HTTPS_PKCS12_PASSWORD} = 'password'; 
my $client = new myStub; 
my $output = $client->foo('test', 'something'); 
print $output 

其中myStubstubmaker.pl创建作为SOAP::Lite一部分.pm的。

和我建立了我的Python脚本如下:

from suds.client import Client 
import os 

os.environ['HTTPS_PKCS12_FILE'] = '/path/to/certificate' 
os.environ['HTTPS_PKCS12_PASSWORD'] = 'password' 
client = Client('file:WSDL') 
output = client.service.foo('test', 'something') 
print output 

这给了我:

File "test.py", line 12, in <module> 
    output = client.service.foo('test', 'something') 
    File "/usr/lib/python2.6/site-packages/suds/client.py", line 542, in __call__ 
    return client.invoke(args, kwargs) 
    File "/usr/lib/python2.6/site-packages/suds/client.py", line 602, in invoke 
    result = self.send(soapenv) 
    File "/usr/lib/python2.6/site-packages/suds/client.py", line 643, in send 
    reply = transport.send(request) 
    File "/usr/lib/python2.6/site-packages/suds/transport/https.py", line 64, in send 
    return HttpTransport.send(self, request) 
    File "/usr/lib/python2.6/site-packages/suds/transport/http.py", line 77, in send 
    fp = self.u2open(u2request) 
    File "/usr/lib/python2.6/site-packages/suds/transport/http.py", line 118, in u2open 
    return url.open(u2request, timeout=tm) 
    File "/usr/lib64/python2.6/urllib2.py", line 391, in open 
    response = self._open(req, data) 
    File "/usr/lib64/python2.6/urllib2.py", line 409, in _open 
    '_open', req) 
    File "/usr/lib64/python2.6/urllib2.py", line 369, in _call_chain 
    result = func(*args) 
    File "/usr/lib64/python2.6/urllib2.py", line 1198, in https_open 
    return self.do_open(httplib.HTTPSConnection, req) 
    File "/usr/lib64/python2.6/urllib2.py", line 1165, in do_open 
    raise URLError(err) 
urllib2.URLError: <urlopen error [Errno 8] _ssl.c:490: EOF occurred in violation of protocol> 

suds客户端获取创建罚款,如果我把它打印出来,我得到预期的方法正在列出等。

回答

5

看起来像urllib2无法与服务器进行通信。我怀疑urllib2是否注意HTTPS_PKCS12_*环境变量。我的猜测是那些特定于你正在使用的Perl库,或Perl本身。 urllib2根本不会执行任何SSL证书验证,如果您希望使用pycurl更好。

这两个问题可能指向您在正确的方向: