Я использовал Zeep против SOAP -сервиса, и он отлично работает. Однако, когда этот сервис находится за Gravitee API Manager, я не могу заставить его работать дольше, просто получаю ответ 404.
Вот мой код:
from zeep import Client, Settings
import base64,sys, logging, traceback
from requests import Session
from zeep.transports import Transport
import requests
from lxml import etree
wsdl= 'https://link_to_service_on_gravitee'
session = Session()
session.verify = False
session.headers['Api-Key']= 'xxxxx'
transport = Transport(session=session)
settings = Settings(raw_response=True, strict=False, xml_huge_tree=True)
client = Client(wsdl, transport=transport, settings=settings)
data = []
data.append(
{'ServerProcessId': 'GL07',
'OrderNumber': 1}
)
cdata = []
cdata.append(
{'Username': 'xxx',
'Client': 'yyy',
'Password': 'zzz'}
)
node = client.create_message(client.service, 'GetResult',input=data, credentials=cdata)
print('*** SOAP Message')
print(etree.tostring(node))
print('*** End SOAP Message')
response = requests.Response()
try:
response = client.service.GetResult(input=data, credentials=cdata)
print(response)
except Exception as e:
print(response.headers)
logging.error(traceback.format_exc())
Когда Я тестирую сообщение, сгенерированное Python (etree.tostring (node)) в SOAPUI, оно работает правильно. Кроме того, если я изменяю api-ключ, я получаю сообщение об ошибке аутентификации, поэтому Gravitee, похоже, принимает ключ из моего кода. Но ответ, который я получаю, с правильным API-ключом, всегда [404].
Получил его, когда я загрузил wsdl в локальный файл, но не хочу делать это для каждого wsdl.
Есть идеи?