Estoy trabajando en un simple raspador web en python 3, pero cuando envío una solicitud get o post, la respuesta es 403. Sin embargo, en python 2 funciona bien. Estoy usando la misma versión de las bibliotecas de solicitudes en ambas versiones. También lo he intentado, Verify=False/True
pero la diferencia en ambas versiones sigue siendo.
solicitudes = 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
Editar por @blhsing:
La lista a continuación realiza un seguimiento de qué versiones específicas de Python funcionan y qué versiones fallan según los comentarios. Hasta ahora, los éxitos y los fracasos han sido consistentes para cada versión específica de Python en todas las plataformas.
Siéntase libre de editar esta sección de la pregunta con sus propios resultados junto con las versiones específicas de Python utilizadas para producir los resultados.
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)
Demostración en repl.it: Python 2.7.16 y Python 3.7.4
ssl.OPENSSL_VERSION
). No necesita todos esos encabezados para reprobar, solo un simple get (url) lo hará.