如何在Python中使用SSL和身份验证连接到SOAP服务(没有WSDL)?

如何在Python中使用SSL和身份验证连接到SOAP服务(没有WSDL)?,python,web-services,ssl,soap,wsdl,Python,Web Services,Ssl,Soap,Wsdl,我想连接到一个在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(

我想连接到一个在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

谁能告诉我怎么解决这个问题吗?或者你能建议我使用其他图书馆吗。我发现的大多数SOAP库只提供到WSDL的连接。

通常在
pfx
文件中有带密钥的客户端证书,而不是CA文件。这些库似乎期望客户机证书作为PEM。您应该提取证书和密钥,如中所示

然后将其作为
cert
key\u文件
参数提交给
SoapClient()
初始化:

client = SoapClient(location="https://mytest.com/Services/",
                    cert='mycert.pem',
                    key_file='mycert.key)
也可以将这两个文件都放入
cert
文件中

如果仍不起作用,则必须在按照中所述检索CA证书后,将其添加为
cacert
参数


有关更多参考信息,请参见
SimpleSAP
:。

的源代码,如下所示:?但请查看错误消息:这更像是一个SSL问题。SSL上下文似乎有问题。CA证书未定义,或者服务器证书在上下文中无效(自签名证书?)。我收到了一个证书,并能够将其添加到Chrome浏览器中。因此,我可以访问我拥有的url(当然,我没有使用我的凭据,因此收到了一条禁止的消息)。我研究了你的建议。非常感谢。您在代码中提供的证书文件是用于身份验证的客户端证书还是用于验证服务器证书的CA证书?我有一个pfx文件,可以从中获得一个证书文件(我认为是CA证书)和一个密钥文件。
client = SoapClient(location="https://mytest.com/Services/",
                    cert='mycert.pem',
                    key_file='mycert.key)