我正在尝试通过 Python 中的 ZEEP 客户端调用 SOAP API,但出现 SSL 错误

问题描述

这是我的代码

import zeep
import os
from requests import Session
from zeep import Client
from zeep.transports import Transport
from zeep import xsd
from zeep.wsse.signature import Signature

key='xxxxxxxx'
pri='xxx.pfx'
pub='xxx.pem'
cert='xxx.cer'
sig=Signature(pri,pub,key)
session = Session()
transport =Transport(session=session)
client = Client('https://sandpit.dvshub.com.au:19443/Bus/VerificationServiceBus.svc/https',wsse=Signature(pri,key))
print('Connected')

我不太确定如何使用 .pfx、.pem、.cer 文件进行连接 我将不胜感激任何指针

我的错误信息:

回溯(最近一次调用最后一次):文件 "/home/ubuntu/.local/lib/python3.6/site-packages/urllib3/connectionpool.py",第 706 行,在 urlopen 中 分块=分块,文件“/home/ubuntu/.local/lib/python3.6/site-packages/urllib3/connectionpool.py”, 第 382 行,在 _make_request 中 self.validate_conn(conn) 文件“/home/ubuntu/.local/lib/python3.6/site-packages/urllib3/connectionpool.py”, 第 1010 行,在 validate_conn 中 conn.connect() 文件“/home/ubuntu/.local/lib/python3.6/site-packages/urllib3/connection.py”, 第 421 行,连接中 tls_in_tls=tls_in_tls,文件“/home/ubuntu/.local/lib/python3.6/site-packages/urllib3/util/ssl.py”, 第 429 行,在 ssl_wrap_socket 中 袜子,上下文,tls_in_tls,server_hostname=server_hostname 文件“/home/ubuntu/.local/lib/python3.6/site-packages/urllib3/util/ssl.py”, 第 472 行,在 _ssl_wrap_socket_impl 中 返回 ssl_context.wrap_socket(sock,server_hostname=server_hostname) 文件“/usr/lib/python3.6/ssl.py”, 第 407 行,在 wrap_socket 中 _context=self,_session=session) 文件“/usr/lib/python3.6/ssl.py”,第 817 行,init self.do_handshake() 文件“/usr/lib/python3.6/ssl.py”,第 1077 行,在 do_handshake 中 self._sslobj.do_handshake() 文件“/usr/lib/python3.6/ssl.py”,第 689 行,在 do_handshake 中 self._sslobj.do_handshake() ssl.SSLError: [SSL: CERTIFICATE_VERIFY_Failed] 证书验证失败 (_ssl.c:852)

在处理上述异常的过程中,又发生了一个异常:

回溯(最近一次调用最后一次):文件 "/home/ubuntu/.local/lib/python3.6/site-packages/requests/adapters.py",第 449 行,发送 timeout=timeout File "/home/ubuntu/.local/lib/python3.6/site-packages/urllib3/connectionpool.py",第 756 行,在 urlopen 中 方法,网址,错误=e,_pool=self,_stacktrace=sys.exc_info()[2] 文件 "/home/ubuntu/.local/lib/python3.6/site-packages/urllib3/util/retry.py",第 574 行,递增 引发 MaxRetryError(_pool,url,error 或 ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='sandpit.dvshub.com.au',port=19443):最大 重试次数超过 url:/Bus/VerificationServiceBus.svc/https (由 SSLError(SSLError(1,'[SSL: CERTIFICATE_VERIFY_Failed] 证书验证失败 (_ssl.c:852)'),))

在处理上述异常的过程中,又发生了一个异常:

回溯(最近一次调用最后一次):文件“Soap.py”,第 20 行,在 client = Client('https://sandpit.dvshub.com.au:19443/Bus/VerificationServiceBus.svc/https',key)) 文件“/home/ubuntu/.local/lib/python3.6/site-packages/zeep/client.py”, 第 73 行,在 init 中 self.wsdl = Document(wsdl,self.transport,settings=self.settings) 文件 "/home/ubuntu/.local/lib/python3.6/site-packages/zeep/wsdl/wsdl.py",第 92 行,在 init 中 self.load(location) 文件“/home/ubuntu/.local/lib/python3.6/site-packages/zeep/wsdl/wsdl.py”, 第 95 行,加载中 document = self._get_xml_document(location) File "/home/ubuntu/.local/lib/python3.6/site-packages/zeep/wsdl/wsdl.py",第 156 行,在 _get_xml_document 中 位置,self.transport,self.location,settings=self.settings 文件“/home/ubuntu/.local/lib/python3.6/site-packages/zeep/loader.py”, 第 79 行,在 load_external 中 content = transport.load(url) 文件“/home/ubuntu/.local/lib/python3.6/site-packages/zeep/transports.py”, 第 122 行,加载中 content = self._load_remote_data(url) 文件“/home/ubuntu/.local/lib/python3.6/site-packages/zeep/transports.py”, 第 134 行,在 _load_remote_data 中 response = self.session.get(url,timeout=self.load_timeout) 文件“/home/ubuntu/.local/lib/python3.6/site-packages/requests/sessions.py”, 第 555 行,在 get 返回 self.request('GET',**kwargs) 文件“/home/ubuntu/.local/lib/python3.6/site-packages/requests/sessions.py”, 第 542 行,请求中 resp = self.send(prep,**send_kwargs) 文件“/home/ubuntu/.local/lib/python3.6/site-packages/requests/sessions.py”, 第 655 行,发送 r = adapter.send(request,**kwargs) 文件“/home/ubuntu/.local/lib/python3.6/site-packages/requests/adapters.py”, 第 514 行,发送 引发 SSLError(e,request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='sandpit.dvshub.com.au',port=19443): Max 重试次数超过 url:/Bus/VerificationServiceBus.svc/https (由 SSLError(SSLError(1,))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)