我想连接到Python中没有WSDL的SOAP API。要连接,我需要添加SSL证书并在之后进行身份验证。
from pysimplesoap.client import SoapClient, SimpleXMLElement
cacert = open(path, 'rb').read() # read the certificate
header = SimpleXMLElement('<Header/>')
credentials = header.add_child('Credentials')
credentials.marshall('Password', 'password')
credentials.marshall('Username', 'username')
client = SoapClient(
location="https://mytest.com/Services/",
cacert=cacert)
client['Header'] = header
client.action = "https://mytest.com/Services/Action1"
client.Action1() # gives SSL error
我收到的结果是SSL错误:
SSLHandshakeError: [Errno 1] _ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
有人可以告诉我如何解决这个问题吗?或者您可以建议我可以使用的任何其他库。我发现的大多数SOAP库只提供与WSDL的连接。
答案 0 :(得分:0)
通常在pfx
文件中,客户端证书带有密钥,而不是CA文件。图书馆似乎期望客户证书为PEM。您应该提取https://stackoverflow.com/a/9516936/3929826中显示的证书和密钥。
然后将其作为SoapClient()
和cert
参数传递到key_file
首页:
client = SoapClient(location="https://mytest.com/Services/",
cert='mycert.pem',
key_file='mycert.key)
还应该可以将两者放入cert
文件中。
如果仍然无效,则必须按照https://stackoverflow.com/a/7886248/3929826中的说明检索CA证书作为cacert
参数。
有关详细信息,请参阅simplesoap
的源代码:https://code.google.com/p/pysimplesoap/source/browse/pysimplesoap/client.py#75。