将准备好的请求从 HTTPS 强制返回到 HTTP Python Zeep 客户端(wsdl https,绑定需要是 http)

Forcing prepared requests from HTTPS back to HTTP Python Zeep client (wsdl https, binding needs to be http)

目前正致力于将 zeep 用于客户端绑定到我们无法控制的应用程序(因此我们无法更改其行为)。

对我来说不幸的是,WSDL 托管在 https:// 页面上,而绑定本身仅支持 HTTP,因此我不能简单地将绑定地址更改为 HTTPS 来使其正常工作。

当第一次创建 zeep 客户端对象时,我假设这是一个 python 请求准备好的请求,现在被迫只接受 SSL。

问题:有没有办法告诉 zeep 或 python 请求下一个响应不是 HTTPS?

示例:

from requests import Session
from zeep import Client
from zeep.transports import Transport

import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

session = Session()
session.verify = False
transport = Transport(session=session)
client = Client('https://example.local:8443/www/core-service/services/LoginService?wsdl', transport=transport)

with client.settings(raw_response=True):
    print(client.service.login('0', 'user', 'password'))

这会 return 这个错误,因为下一个调用是针对一个 http 地址:

requests.exceptions.SSLError: HTTPSConnectionPool(host='localhost', port=9090): Max retries exceeded with url: /core-service/services/LoginService (Caused by SSLError(SSLError(1, '[SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:877)'),))

您可以将 "force_https" 属性 设置为 false 以避免 https 强制。

https://python-zeep.readthedocs.io/en/master/settings.html#settings