在我的应用程序中,我需要访问内部(公司)Soap API。对于这种访问,我到目前为止使用的是 Zeep。但是现在访问必须通过代理,API的实际地址必须转换为代理的虚拟地址。
创建 Zeep 客户端也能正常工作,我可以访问 WSDL 文件。但是,调用相应服务时会出现问题,因为 Zeep 从 WSDL 文件中获取相应的 URL,而这与代理的虚拟地址不匹配。
我将尝试用我的具体代码来说明下面的问题:
假设SOAP API的地址是
https://original-soap/wsdl?service=<service_name>
.
在代理中有一个从
https://origial-soap
到http://virtual-soap
的映射。
所以 Zeep 应该使用的地址是
http://virtual-soap/wsdl?service=<service_name>
.
我初始化我的 Zeep 客户端如下:
from requests.auth import HTTPBasicAuth
from requests import Session
from zeep import Client
from zeep.transports import Transport
from zeep.helpers import serialize_object
session = Session()
session.proxies = {
'http': 'http://<proxy_host>:<proxy_port>',
'https': 'http://<proxy_host>:<proxy_port>',
}
proxy_header = {
"Proxy-Authorization": "Bearer <proxy_access_token>"
}
session.headers.update(proxy_header)
session.verify = False
session.auth = HTTPBasicAuth(<soap_user>, <soap_password>)
transport = Transport(session=session)
client = Client(wsdl='http://virtual-saop/wsdl?service=<service_name>', transport=transport)
print('CLIENT INITIALIZED') # <-- This print command is executed
soap_result = client.service['<service_function_name>'](<function parameters>) # <-- Connectivity errors occur here
所以我的问题是如何更改 Zeep 在调用该服务时使用的 URL,以便此处也使用虚拟地址。
提前感谢您的帮助!