Простой запрос get / post заблокирован в Python 3, но не в Python 2

Я работаю над простым веб-шабером в Python 3, но когда я отправляю запрос get или post, ответом является 403. В Python 2 все работает нормально. Я использую одну и ту же версию библиотек запросов в обеих версиях. Я также пытался с Verify=False/True, но разница в обеих версиях остается.

запросов = 2.22.0

certifi = 2019.9.11

from requests import get
url = 'https://www.gamestop.com/'
header = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-US,en;q=0.5',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0',
    'DNT': '1',
    'Upgrade-Insecure-Requests': '1',
    'Connection': 'keep-alive',
    'Host': 'www.gamestop.com'
}
res = get(url, headers=header, verify=False).status_code
print(res)
# 403 when using python 3.7.4
# 200 when using python 2.7.16

Редактировать @blhsing:

Список ниже отслеживает из которых конкретные версии Python работают и какие версии терпят неудачу в соответствии с комментариями. До сих пор успехи и неудачи были согласованы для каждой конкретной версии Python на разных платформах.

Не стесняйтесь редактировать этот раздел вопроса со своими собственными результатами вместе с конкретными версиями Python, используемыми для получения результатов.

2.7.14 works (blhsing)
2.7.16 works (repl.it)
3.6.5 works (blhsing)
3.6.8 fails (Reinderien and blhsing)
3.7.3 works (wim and blhsing)
3.7.4 fails (repl.it and blhsing)
3.8.0 fails (OP)

Демонстрация по repl.it: Python 2.7.16 и Python 3.7.4

19
задан Media Mindz 16 October 2019 в 13:22
поделиться

1 ответ

Это - исключение, выданное urlib3:

/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/urllib3/connectionpool.py:1004: InsecureRequestWarning: непроверенный Запрос HTTPS делается. Добавление проверки сертификата настоятельно рекомендуется. См.: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning,

Согласно последняя информация о версии, раздел 1.25.5 (2019-09-19) :

Добавляют смягчение для BPO-37428 , влияющего на Python < 3.7.4 и OpenSSL 1.1.1 +, который заставил проверку сертификата быть включенной при использовании cert_reqs=CERT_NONE. (Выпуск [#1119] 1682 )

можно следовать эти проблема о Github, это было закрыто.

пользователь TLDR

@sethmlarson на Github нашел эту ошибку на [1 121] urllib3:

create_urllib3_context ():

    # Enable post-handshake authentication for TLS 1.3, see GH #1634. PHA is
    # necessary for conditional client cert authentication with TLS 1.3.
    # The attribute is None for OpenSSL <= 1.1.0 or does not exist in older
    # versions of Python.
    if getattr(context, "post_handshake_auth", None) is not None:
        context.post_handshake_auth = True

устанавливание этого значения к True включит проверку сертификатов сервера вместо того, чтобы быть отключенным.

9
ответ дан 30 November 2019 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: