代码失败的原因是
req = urllib.request.Request(url)
在浏览器地址行中输入正常工作的隆隆 RSS 提要地址会返回“403 - 授权无济于事”。
youtube RSS feed 地址工作正常,其他 RSS feed 地址工作正常。
顺序是地址被击中,隆隆声给出一个到 API 地址的临时重定向,然后给出 403。原始地址和 API 地址都可以从浏览器地址行正常工作。
我一直在添加越来越多的标头等...并且只点击一个网址...所以它不太可能受到限制 - 在 RSS 提要上拥有更聪明的反机器人内容是没有意义的(!)但我都试过了,还是不行。欢迎任何想法。
仅供参考
这是我尝试过的两组标题 - 它们不起作用,但确实破坏了 YouTube 链接(!)。
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)
我终于追踪到了这一点 - cloudflare 工具正在阻止请求,我无法找出该请求是什么让他们感到不安,但我使用了 CURL 并且它工作得很好......所以将代码更改为看起来像 CURL 请求,这仍然不起作用。所以我重写了代码以实际调用 CURL 来执行获取...现在工作正常。
我本可以使用wireshark或类似工具来更仔细地检查请求,但切换到CURL更快/更容易。