Sto lavorando a un semplice raschietto web in Python 3 ma quando invio una richiesta get o post, la risposta è 403. In Python 2 funziona bene comunque. Sto usando la stessa versione delle librerie di richieste in entrambe le versioni. Ho anche provato con, Verify=False/True
ma la differenza in entrambe le versioni rimane.
richieste = 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
Modifica di @blhsing:
L'elenco seguente tiene traccia di quali specifiche versioni di Python funzionano e quali versioni non funzionano in base ai commenti. Finora successi e fallimenti sono stati coerenti per ogni specifica versione di Python su piattaforme.
Sentiti libero di modificare questa sezione della domanda con i tuoi risultati insieme alle specifiche versioni di Python utilizzate per produrre i risultati.
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)
Demo su repl.it: Python 2.7.16 e Python 3.7.4
ssl.OPENSSL_VERSION
). Non hai bisogno di tutte quelle intestazioni per riprogrammare, solo un semplice get (url) lo farà.