Как отключить проверку сертификата безопасности в Python запросы



Я использую



import requests
requests.post(url='https://foo.com', data={'bar':'baz'})


но я получаю запрос.исключения.SSLError.
У веб-сайта есть истекший сертификат, но я не отправляю конфиденциальные данные, поэтому для меня это не имеет значения.
Я бы предположил, что есть аргумент типа "verifiy=False", который я мог бы использовать, но я не могу его найти.

934   4  

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 = False

import 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

    Ничего не найдено.