zeep-禁用警告“将soap:地址位置强制设置为HTTPS”

时间:2019-11-01 16:50:32

标签: python python-3.x logging wsdl zeep

我正在使用zeep包来访问https上的某些API,并且在每个连接上它都会打印出一条警告(到stderr):

Forcing soap:address location to HTTPS

我确实找到了一些搜索,发现负责的行是this,这意味着这是模块的日志记录级别的结果。更改日志级别似乎需要编辑this file

这对我来说是一个糟糕的解决方案,因为我希望能够在运行时关闭此警告,因为使用此软件包的应用程序将是冻结的应用程序(exe)。

如果这是相关的,那么这些是显示该警告所需的最少行(尽管显然,此处的域是虚构的域,用户名和密码也是如此):

import zeep
client = zeep.CachingClient('https://api.somedomain.com/Services/ApiService.svc?singleWsdl')
client.service.VerifyLogin('user', 'pass')

我知道可以将zeep客户端设置为不强制使用https,但是我认为这样会使连接的安全性降低? (毕竟,我将用户名和密码传递为不带https的明文)

3 个答案:

答案 0 :(得分:4)

经过几天的研究,我终于能够自己解决这个问题。我没有意识到可以从导入的模块更改日志记录级别。我在代码的开头(在导入之后)添加了这一行,并解决了该问题:

import logging
logging.getLogger('zeep').setLevel(logging.ERROR)

希望这可以帮助遇到相同问题的其他人

答案 1 :(得分:2)

警告上下文管理器如何?

您可以做类似我过去使用过的事情

import zeep
import warnings

with warnings.catch_warnings(record=True) as w:
    warnings.simplefilter('always') 
    # this filters all warnings, and the context manager records them
    # your code is here:
    client = zeep.CachingClient('https://api.somedomain.com/Services/ApiService.svc?singleWsdl')
    client.service.VerifyLogin('user', 'pass')

    # now you want to verify you didn't ignore a different warning
    # here's an idea of how to verify:
    assert len(w) == 1, "More than one warning caught!"
    assert isinstance(w[0], WarningCategoryItShouldBe)


答案 2 :(得分:1)

如果您想对日志级别切换更具体一些,为了不丢失整个zeep模块中的其他警告,可以按如下所示进行替代设置:

Option Explicit

Sub closeWithoutPromptToSave()

    Dim currItem As MailItem
    
    Set currItem = ActiveInspector.currentItem
    currItem.Close olSave
    
End Sub

这将仅对soap绑定类阻止警告消息,而对于其余部分则不会。