Выявление и устранение исключения: «OpenSSL.SSL.Error» с использованием модуля запросов Python - PullRequest
1 голос
/ 01 июля 2019

В настоящее время я анализирую список URL-адресов, и в случае, если одно выдает исключение, я хочу просто прервать его и перейти к следующему.

Однако я продолжаю получать

OpenSSL.SSL.Error: [('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')]

Решение этого исключения сейчас выходит за рамки моей компетенции, поэтому я хочу просто пропустить его сейчас и разобраться с этим позже.Моя проблема, однако, заключается в том, что когда я пишу команду catch для этого:

    try:
        r = requests_retry_session(session=s).get(test_link, verify=cafile, allow_redirects=True, timeout=4.0)

    except OpenSSL.SSL.Error:
        print('SSL error, moving to next domain')
        break

, я получаю это:

NameError: name 'OpenSSL' is not defined

Я знаю, что самый простой способ исправить это - простоverify=False, однако, это очень небезопасно, и я бы предпочел не открывать себя для возможной атаки MITM.

То, что я пробовал:

Попытка следоватьдокументация по этому предыдущему связанному вопросу :

pip install --upgrade certifi

И, наконец, чрезвычайно неаккуратный блок try try, который по существу перехватывает NameError: name 'OpenSSL' is not defined и разбивает его как ошибку имени, что вовсе не является пифоническим.Я знаю, что могу сделать очень общий перехват всех, однако я не хочу пропускать все ошибки.

Я использую Python 3.7.3 и запрашивает 2.22.0

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Найдено правильное исключение, его очень тривиальная, но запутанная документация.

Так что OpenSSL.SSL.Error будет перехвачено с помощью requests.exceptions.SSLError, и импорт OpenSSL или pyOpenSSL не нужно делать (явно) вэто дело.

1 голос
/ 01 июля 2019

Попытка следовать документации по этому предыдущему связанному вопросу

Вы должны были решить эту обработку исключений, следуя этим инструкциям и установив pyopenssl (pip install pyopenssl) и импортировав OpenSSL в верхней части вашего модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...