使用 Zeep 通过代理访问 SOAP 时更改服务 URL

问题描述 投票:0回答:0

在我的应用程序中,我需要访问内部(公司)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,以便此处也使用虚拟地址。

提前感谢您的帮助!

python soap proxy soap-client zeep
© www.soinside.com 2019 - 2024. All rights reserved.