我已经对 SOAP 服务使用了 zeep,它运行良好。但是,当这个服务放在 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())
当我在 SOAPUI 中测试 Python (etree.tostring(node)) 生成的消息时,它可以正常工作。此外,如果我更改 api-key,我会收到有关身份验证问题的错误,因此 Gravitee 似乎接受了我的代码中的密钥。但是我得到的响应是正确的 api-key,总是 [404]。
当我将 wsdl 下载到本地文件时让它工作,但不想为每个 wsdl 都这样做。
有任何想法吗 ?