Je travaille sur un simple grattoir Web en python 3 mais quand j'envoie une demande get ou post, la réponse est 403. En python 2, ça marche bien. J'utilise la même version des bibliothèques de requêtes dans les deux versions. J'ai également essayé avec Verify=False/True
mais la différence dans les deux versions demeure.
demandes = 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
Modifier par @blhsing:
La liste ci-dessous permet de savoir quelles versions spécifiques de Python fonctionnent et quelles versions échouent en fonction des commentaires. Jusqu'à présent, les succès et les échecs ont été cohérents pour chaque version Python spécifique sur toutes les plateformes.
N'hésitez pas à modifier cette section de la question avec vos propres résultats ainsi que les versions spécifiques de Python utilisées pour produire les résultats.
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)
Démo sur repl.it: Python 2.7.16 et Python 3.7.4
ssl.OPENSSL_VERSION
). Vous n'avez pas besoin de tous ces en-têtes à reproduire, juste une simple vieille get (url) le fera.