Ich arbeite an einem einfachen Web-Scraper in Python 3, aber wenn ich eine Get- oder Post-Anfrage sende, lautet die Antwort 403. In Python 2 funktioniert dies jedoch einwandfrei. Ich verwende in beiden Versionen dieselbe Version von Anforderungsbibliotheken. Ich habe es auch mit versucht, Verify=False/True
aber der Unterschied in beiden Versionen bleibt bestehen.
Anfragen = 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
Bearbeiten von @blhsing:
In der folgenden Liste wird nachverfolgt, welche bestimmten Python-Versionen funktionieren und welche Versionen gemäß den Kommentaren fehlschlagen. Bisher waren Erfolge und Misserfolge für jede spezifische Python-Version plattformübergreifend konsistent.
Sie können diesen Abschnitt der Frage mit Ihren eigenen Ergebnissen und den spezifischen Python-Versionen bearbeiten, mit denen die Ergebnisse erstellt wurden.
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 auf repl.it: Python 2.7.16 und Python 3.7.4
ssl.OPENSSL_VERSION
). Sie brauchen nicht alle diese Header, um zu reproduzieren, nur eine einfache alte get (url) wird es tun.Antworten:
Dies ist die von urlib3 ausgelöste Ausnahme:
Gemäß den neuesten Versionshinweisen, Abschnitt 1.25.5 (2019-09-19) :
Sie können das Problem auf Github verfolgen , es wurde geschlossen.
TLDR
Benutzer @sethmlarson auf Github hat diesen Fehler auf urllib3 gefunden :
Wenn Sie diesen Wert auf setzen,
True
wird die Überprüfung von Serverzertifikaten aktiviert, anstatt deaktiviert zu werden.quelle