python - Zeep - 关闭主机验证

标签 python soap zeep

我正在使用 Python zeep发出 SOAP 请求。对于 SSL 验证,HostHeaderSSLAdapter添加为我的 URL https://dev_alias:8096/some_soap,包含别名而不是实际主机名。

下面带有 requests 的代码工作正常。所以我假设 session 是正确的。

import requests
from requests_toolbelt.adapters import host_header_ssl
from zeep.transports import Transport
from zeep import Client, Settings

url = 'https://dev_alias:8096/some_soap'
params = {'param1': 'value1'}

session = requests.Session()
session.verify = 'CertBundle.pem'
session.mount('https://', host_header_ssl.HostHeaderSSLAdapter())

headers = {'SOAPAction': '""', 'Content-Type': 'text/xml; charset=utf-8'}
message = b"<?xml version=\'1.0\' encoding=\'utf-8\'?>....</soap-env:Envelope>"

session.post(url, data=message, headers=headers)

但是,当相同的session 用于zeep 的Transport 时,此代码会失败。

transport = Transport(session=session)
client = Client(url, transport=transport)
client.service.some_service(params)

SSLError: HTTPSConnectionPool(host='actual_hostname', port=8096): 
Max retries exceeded with url: /some_soap (Caused by SSLError(CertificateError(
"hostname 'actual_hostname' doesn't match 'dev_alias'",),))

如何使用 zeep 关闭主机名验证?使用 zeep 版本 3.4.0 0 并请求 2.22.0

最佳答案

出于测试目的,也许您可​​以按照此处说明禁用 ssl 验证 https://python-zeep.readthedocs.io/en/master/transport.html

在这种情况下,将您的 session.verify 行更改为

session.verify = False

请注意,您几乎肯定不想在生产系统中执行此操作。

关于python - Zeep - 关闭主机验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57405134/

相关文章:

python - 使用 python 创建正确的 JSON 字符串

python - Sabre GetReservation wsdl 不包含 PriceQuoteServices 的架构

python - 如何打印一个可以包含自身的类

c# - WCF 使用 SOAP 1.2,即使 MessageVersion 是 Soap11WSAddressing10

asp.net - BlackBerry Web 服务调用参数编码

java - IWAB0399E 从 WSDL 生成 Java 时出错 : java. io.IOException:错误:缺少 <soap:fault> 元素 inFault

Python、Zeep 对 Pandas 的回应

python - 在某些情况下使 zeep 使用默认命名空间而不是命名命名空间

python - 类型错误 : Can't convert 'int' object to str implicitly(python)

python - 编写管理器来过滤查询集结果