Estou trabalhando em um raspador da web simples no python 3, mas quando envio uma solicitação de recebimento ou postagem, a resposta é 403. No python 2 funciona bem. Estou usando a mesma versão das bibliotecas de solicitações nas duas versões. Eu também tentei com, Verify=False/True
mas a diferença em ambas as versões permanece.
pedidos = 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:
A lista abaixo controla quais versões específicas do Python funcionam e quais falham de acordo com os comentários. Até agora, sucessos e falhas foram consistentes para cada versão específica do Python entre plataformas.
Sinta-se à vontade para editar esta seção da pergunta com seus próprios resultados, juntamente com as versões específicas do Python usadas para produzir os 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)
Demonstração no repl.it: Python 2.7.16 e Python 3.7.4
ssl.OPENSSL_VERSION
). Você não precisa de todos esses cabeçalhos para reproduzir novamente, apenas um get (url) antigo simples o fará.