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

时间:2019-10-24 15:42:42

标签: python soap-client zeep

当前正在使用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'))

这将返回此错误,因为下一个调用是针对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)'),))

1 个答案:

答案 0 :(得分:1)

您可以将“ force_https”属性设置为false,以避免强制使用https。

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