使用Python urllib.request请求Rumble RSS Feed返回403错误求助
Rumble RSS Feed请求403错误解决思路
问题情况
- 出错代码行:
req = urllib.request.Request(url) - 核心问题:浏览器能正常打开的Rumble RSS Feed地址,用Python urllib.request请求时返回「403 - authorisation will not help」错误,YouTube等其他平台的RSS Feed请求正常。
- 请求流程:访问原RSS地址后,Rumble会临时重定向到一个API地址,但这个API地址在Python请求中返回403,而原地址和API地址在浏览器中都能正常访问。
- 已尝试操作:添加过多组请求头(示例如下),且仅单次请求,排除限流可能,但所有尝试均无效。
已尝试的请求头示例
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'Sec-Fetch-Dest': 'document', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-Site': 'none', 'Sec-Fetch-User': '?1', 'Cache-Control': 'max-age=0', } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0', 'Accept': 'application/rss+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', 'Referer': 'https://www.rumble.com/', 'Origin': f'https://{parsed_url.netloc}' }
使用方式:
req = urllib.request.Request(url, headers=headers)
解决思路
- 1. 完全复刻浏览器请求头:打开浏览器开发者工具(F12),切换到「网络」标签,访问目标RSS Feed,找到对应的请求,复制完整的请求头(包括Cookie、Host、甚至一些不常见的字段),直接粘贴到代码中使用。很多网站会校验Cookie或其他隐性标识,仅模拟几个常用字段不够。
- 2. 手动处理重定向:urllib的自动重定向可能会丢失部分请求头信息。可以先请求原RSS地址,获取重定向后的API地址,再单独对API地址发起请求,同时确保携带浏览器访问该API时的全部请求头。
- 3. 换用requests库尝试:urllib的重定向和头信息传递逻辑相对死板,改用requests库会更灵活。示例代码:
import requests # 替换为抓包得到的完整请求头 full_headers = { # 这里粘贴浏览器请求的所有头字段 } response = requests.get(target_url, headers=full_headers, allow_redirects=True) print(response.status_code) print(response.text)
- 4. 重点检查Cookie字段:浏览器访问时会自动携带网站设置的Cookie,而Python请求默认没有这部分内容,这是导致403的常见原因。抓包时务必把Cookie字段完整复制到请求头里。
内容的提问来源于stack exchange,提问作者pperrin
相关产品推荐
相关产品推荐

