python - Python requests.get 因 403 被禁止而失败,即使在使用标头和 Session 对象之后也是如此
问题描述
我正在发出一个获取 JSON 的 GET 请求,它在任何设备上的任何浏览器上都可以正常工作,但不能通过 python 请求:
url = 'https://angel.co/autocomplete/new_tags'
params = {'query': 'sci', 'tag_type': 'MarketTag'}
resp = requests.get(url,params=params)
resp.raise_for_status()
给HTTPError: 403 Client Error: Forbidden for url: https://angel.co/autocomplete/new_tags?query=ab&tag_type=MarketTag
所以我尝试了:
- Python 请求。403 Forbidden - 我不仅尝试在标头中使用 User-Agent,而且还尝试
Request Headers
在 Firefox 部分中找到的所有其他标头用于 JSON 响应,但仍然是 403! - Python 请求 - 403 被禁止 - 尽管设置了 `User-Agent` 标头- 通过 Session 对象发出请求,我仍然得到 403!
可能的原因是什么?还有什么我可以尝试使用的吗?
headers
编辑:我在属性中使用的请求标头(在 Firefox 中检查 JSON 的标头部分) :
{'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',
'Connection': 'keep-alive',
'Host': 'angel.co',
'If-None-Match: 'W/"5857a9eac987138be074e7bdd4537df8"',
'TE': 'Trailers',
'Upgrade-Insecure-Requests': 1,
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0'}
解决方案
如果即使在将用户代理添加到标头后,get 请求仍返回 403 Forbidden,您可能需要添加更多标头,如下所示:
headers = {
'user-agent':"Mozilla/5.0 ...",
'accept': '"text/html,application...',
'referer': 'https://...',
}
r = requests.get(url, headers=headers)
在 chrome 中,可以在开发者工具的 Network > Headers > Request-Headers 中找到请求标头。(按 F12 切换它。)
推荐阅读
- swift - 如何通过 Toggle 在 @EnvironmentObject var 中切换 var Bool
- frama-c - 在 FRAMA-C 中验证矩阵转置函数
- excel - Excel:获取前 3 个值和名称
- algorithm - 如何在 |V| 中找到图的 MST 给定生成树加上另一条边的时间
- c# - 如何下载电子邮件附件 asp.net 网络表单?
- php - Laravel 模型创建覆盖
- java - 是什么影响了 JVM 内存分配超出 -Xmx?
- python - 如何改进 textacy.extract.semistructured_statements() 结果
- multithreading - 如何在 Rust 结构中创建线程局部变量?
- r - 如果另一列包含值,则过滤列值