Я могу выполнить запрос SOAP через интерфейс SOAP. Однако, когда я делаю то же самое с Python, он терпит неудачу. Что нужно сделать для успешного перевода запросов SOAP UI в код Python.
import requests
from OpenSSL import crypto
filename = "C:\\Folder\\Cert.P12"
Pasword = "PW"
url='url.wsdl'
class Pkcs12Context(requests.packages.urllib3.contrib.pyopenssl.OpenSSL.SSL.Context):
def __init__(self, method):
super().__init__(method)
p12 = crypto.load_pkcs12(open(filename, 'rb').read(), Pasword)
self.use_certificate(p12.get_certificate())
self.use_privatekey(p12.get_privatekey())
# Monkey-patch the subclass into OpenSSL.SSL so it is used in place of the stock version
requests.packages.urllib3.contrib.pyopenssl.OpenSSL.SSL.Context = Pkcs12Context
endPoint = 'endpointurl'
body = u"""
XML Request
"""
encoded_request = body.encode('utf-8')
headers = {
"Content-Type": "application/wsdl+xml;charset=UTF-8",
"Content-Length": str(len(body))
}
with requests.Session() as s:
r =s.get(url)
print(r.headers)
r=s.post(endPoint,data=encoded_request,headers=headers,verify=True)
print(r.headers)
print(r.text)
Когда я выполняю в Python, это выдает ошибку, HTTP-заголовок отсутствует в поле «SOAPAction».