파이썬 3에서 간단한 웹 스크레이퍼로 작업하고 있지만 get 또는 post 요청을 보내면 응답은 403입니다. 파이썬 2에서는 잘 작동합니다. 두 버전에서 동일한 버전의 요청 라이브러리를 사용하고 있습니다. 나는 또한 시도 Verify=False/True
했지만 두 버전의 차이점은 남아 있습니다.
요청 = 2.22.0
인증 = 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
@blhsing에 의해 편집 :
아래 목록은 주석에 따라 작동하는 특정 Python 버전과 실패한 버전을 추적합니다. 지금까지 여러 플랫폼에서 각 특정 Python 버전에 대해 성공과 실패가 일관되었습니다.
결과를 생성하는 데 사용되는 특정 Python 버전과 함께 자신의 결과로 질문 의이 섹션을 자유롭게 편집하십시오.
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)
repl.it 데모 : Python 2.7.16 및 Python 3.7.4
ssl.OPENSSL_VERSION
) 때문일 것입니다 . 재현하기 위해 모든 헤더가 필요하지는 않지만 평범한 오래된 get (url)만이 가능합니다.