Как исправить ошибку ssl: CERTIFICATE_VERIFY_FAILED в Python
-
Разберем популярную ошибку
ssl: CERTIFICATE_VERIFY_FAILED. Она означает, что Python не может проверить подлинность HTTPS-сертификата сервера. Часто скрипт отлично работает на домашнем Wi-Fi, но моментально падает с этой ошибкой в офисе или при включенном корпоративном VPN.Причина кроется в сетевой безопасности. Корпоративные фаерволы и системы защиты часто работают по принципу “человек посередине” (MitM), подменяя оригинальный сертификат целевого сайта на свой собственный. Если этого корпоративного сертификата нет в доверенном хранилище (trust store) вашего компьютера, Python обрывает соединение в целях безопасности.
Допустим, нам нужно написать простой скрипт для обращения к внешнему API из офисной сети. В качестве примера возьмем эндпоинт
https://catfact.ninja/fact, который возвращает случайный факт о котах. Использовать будем только встроенные библиотеки:json,sslиurllib.request.Чтобы скрипт игнорировал подмену сертификата и успешно выполнил запрос, мы можем принудительно отключить проверку. Для этого используется модуль
sslи функция_create_unverified_context(). Мы создаем “недоверенный” контекст и передаем его параметром в запросurllib.# Встроенные либы import json import ssl import urllib.request url = "https://catfact.ninja/fact" def get_cat_fact(): # Формируем запрос с указанием User-Agent req = urllib.request.Request( url, headers={ "User-Agent": "Mozilla/5.0", }, ) # Создаем контекст, который игнорирует проверку SSL context = ssl._create_unverified_context() try: # Передаем контекст вторым аргументом response = urllib.request.urlopen(req, context=context) result = json.loads(response.read()) print("Полный ответ:", result) print("Факт:", result["fact"]) except Exception as e: print("Ошибка:", e) get_cat_fact()
Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2024 - 2026 ExLends, Inc. Все права защищены.