Я работаю над простым веб-шабером в 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
ssl.OPENSSL_VERSION
). Вам не нужны все эти заголовки для воспроизведения, просто старый get (url) сделает это.Ответы:
Это исключение, выданное urlib3:
В соответствии с последними примечаниями к выпуску, раздел 1.25.5 (2019-09-19) :
Вы можете следить за вопросом на Github , он был закрыт.
TLDR
Пользователь @sethmlarson на Github обнаружил эту ошибку на urllib3 :
установка этого значения
True
будет включать проверку сертификатов сервера, вместо того, чтобы быть отключенной.источник