Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将perl soap应用程序移植到python_Python_Perl_Soap - Fatal编程技术网

将perl soap应用程序移植到python

将perl soap应用程序移植到python,python,perl,soap,Python,Perl,Soap,目前,我正在尝试将Perl SOAP通信应用程序移植到一个Python等效程序,但似乎无法通过urllib2通过suds抛出的错误。我的工作perl soap脚本是: use myStub; $ENV{HTTPS_PKCS12_FILE} = '/path/to/certificate'; $ENV{HTTPS_PKCS12_PASSWORD} = 'password'; my $client = new myStub; my $output = $client->foo('test',

目前,我正在尝试将Perl SOAP通信应用程序移植到一个Python等效程序,但似乎无法通过
urllib2
通过
suds
抛出的错误。我的工作perl soap脚本是:

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
其中,
myStub
是由
stubmaker.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>
文件“test.py”,第12行,在
output=client.service.foo('test','something')
文件“/usr/lib/python2.6/site packages/suds/client.py”,第542行,在调用中__
返回client.invoke(args、kwargs)
文件“/usr/lib/python2.6/site packages/suds/client.py”,第602行,在invoke中
结果=self.send(soapenv)
文件“/usr/lib/python2.6/site packages/suds/client.py”,第643行,在send中
回复=传输。发送(请求)
文件“/usr/lib/python2.6/site packages/suds/transport/https.py”,第64行,在send中
返回HttpTransport.send(self,request)
文件“/usr/lib/python2.6/site packages/suds/transport/http.py”,第77行,在send中
fp=self.u2open(u2request)
文件“/usr/lib/python2.6/site packages/suds/transport/http.py”,第118行,在u2open中
返回url.open(u2request,timeout=tm)
文件“/usr/lib64/python2.6/urllib2.py”,第391行,打开
响应=自身打开(请求,数据)
文件“/usr/lib64/python2.6/urllib2.py”,第409行,打开
"开放",
文件“/usr/lib64/python2.6/urllib2.py”,第369行,在调用链中
结果=func(*args)
文件“/usr/lib64/python2.6/urllib2.py”,第1198行,https_open
返回self.do_open(httplib.HTTPSConnection,req)
文件“/usr/lib64/python2.6/urllib2.py”,第1165行,打开
引发URL错误(err)
urllib2.URLError:

suds
客户端创建得很好,如果我将其打印出来,就会得到所列出的预期方法等。

看起来
urllib2
无法与服务器通信。我怀疑
urllib2
是否注意到了
HTTPS\u PKCS12.*
环境变量。我的猜测是,这些特定于您正在使用的Perl库,或者Perl本身
urllib2
根本不进行任何SSL证书验证,如果您希望这样做,最好使用它

这两个问题可能会为您指明正确的方向: