Python发送GET请求返回不明403错误 浏览器可正常访问
问题原因与修复方案
- 首先修正
requests.get的传参错误:你当前把headers作为第二个位置参数传入,requests第二个位置参数对应的是请求参数params,而非请求头,需要显式指定headers=headers才能让自定义请求头生效。 - 补充缺失的校验请求头:该站点会校验
Accept、Accept-Encoding、Accept-Language等请求头,仅传Host和User-Agent无法通过校验,需要把浏览器里的核心请求头补充完整。
修改后可正常运行的代码如下:
import requests url = 'https://i7.sportsdatabase.com/nba/query.json?sdql=50+%3C+Kobe+Bryant%3Apoints+and+site%3Daway&sport=nba' headers = { 'Host': 'i7.sportsdatabase.com', 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"', 'sec-ch-ua-mobile': '?0', 'DNT': '1', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Sec-Fetch-Site': 'none', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'en,en-US;q=0.9,it;q=0.8,es;q=0.7', } r = requests.get(url, headers=headers) # 确认请求成功 print(r.status_code) print(r.json())
补充说明:浏览器请求头里的
If-None-Match是缓存校验字段,非必填,无需添加也能正常请求,加了反而可能因为缓存命中返回304状态码。
内容的提问来源于stack exchange,提问作者DPyM
相关产品推荐
相关产品推荐

