zeep - отключить предупреждение "Принудительное мыло: расположение адреса по HTTPS" - PullRequest
7 голосов
/ 01 ноября 2019

Я использую пакет zeep для доступа к некоторому API по https, и при каждом соединении он выводит предупреждение (в stderr):

Forcing soap:address location to HTTPS

В результате некоторых поисков, которые я выполнял, обнаруживалось, чтоОтветственная линия это , что означает, что это результат уровня регистрации модуля. Изменение уровня журнала требует редактирования этого файла .

Это плохое решение для меня, потому что я хочу иметь возможность отключить это предупреждение во время выполнения, потому что приложение использует этоПакет будет замороженным приложением (exe).

Если это уместно, это минимальные строки, необходимые для отображения этого предупреждения (хотя очевидно, что домен здесь вымышленный, как и пользователь и пароль):

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

Я знаю, что zeep клиенты могут быть настроены на принудительное отключение HTTPS, но я предполагаю, что это сделает соединение менее безопасным? (в конце концов, я передаю имена пользователей и пароли в виде открытого текста без https)

Ответы [ 2 ]

4 голосов
/ 06 ноября 2019

После нескольких дней исследований я наконец-то смог решить это самостоятельно. Я не понимал, что уровни входа могут быть изменены из импортированных модулей. Я добавил эту строку в начале моего кода (после импорта), и это исправило проблему:

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

Надеюсь, что это поможет другим людям, которые сталкиваются с той же проблемой

2 голосов
/ 06 ноября 2019

Как насчет менеджера контекста предупреждений?

вы можете сделать что-то подобное, что я использовал в прошлом

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)


...