我正在使用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的明文)
答案 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绑定类阻止警告消息,而对于其余部分则不会。