Как отключить проверку сертификата безопасности в Python запросы
Я использую
import requests
requests.post(url='https://foo.com', data={'bar':'baz'})
но я получаю запрос.исключения.SSLError.
У веб-сайта есть истекший сертификат, но я не отправляю конфиденциальные данные, поэтому для меня это не имеет значения.
Я бы предположил, что есть аргумент типа "verifiy=False", который я мог бы использовать, но я не могу его найти.
4 ответов:
С документация:
запросы также могут игнорировать проверку сертификата SSL, если вы установили
verifyзначение false.>>> requests.get('https://kennethreitz.com', verify=False) <Response [200]>если вы используете сторонний модуль и хотите отключить проверки, вот контекстный менеджер, который исправляет обезьяны
requestsи изменяет его так, чтоverify=Falseпо умолчанию и подавляет предупреждение.import warnings import contextlib import requests from urllib3.exceptions import InsecureRequestWarning try: from functools import partialmethod except ImportError: # Python 2 fallback: https://gist.github.com/carymrobbins/8940382 from functools import partial class partialmethod(partial): def __get__(self, instance, owner): if instance is None: return self return partial(self.func, instance, *(self.args or ()), **(self.keywords or {})) @contextlib.contextmanager def no_ssl_verification(session=requests.Session): old_request = session.request session.request = partialmethod(old_request, verify=False) with warnings.catch_warnings(): warnings.simplefilter('ignore', InsecureRequestWarning) yield session.request = old_requestи пример того, как его использовать:
with no_ssl_verification(): requests.get('https://93.184.216.3/') print('It works') requests.get('https://93.184.216.3/', verify=False) print('It resets back') try: requests.get('https://93.184.216.3/') except requests.exceptions.SSLError: print('It breaks')
использовать запросы.пакеты.urllib3.disable_warnings ().
import requests requests.packages.urllib3.disable_warnings() requests.post(url='https://foo.com', data={'bar':'baz'})
добавить блендер, вы можете отключить SSL для всех запросов с помощью
Session.verify = Falseimport requests session = requests.Session() session.verify = False session.post(url='https://foo.com', data={'bar':'baz'})отметим, что
urllib3, (который запрашивает использует),рекомендует делая непроверенные запросы HTTPS и подниметInsecureRequestWarning.
Если вы хотите отправить именно post-запрос с опцией verify=False, самый быстрый способ-использовать этот код:
import requests requests.api.request('post', url, data={'bar':'baz'}, json=None, verify=False)
Comments