You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go应用获取Reddit子版块RSS Feed时遭遇403 Forbidden问题求助

解决Go请求Reddit RSS返回403 Forbidden的问题

核心原因

Reddit的反爬机制会校验请求头的完整性,Go默认的HTTP请求头过于简洁——即便你设置了正确的User-Agent,缺少其他必要的请求头(如Accept)也会被判定为非合法请求,从而返回403。而你手动使用HTTP客户端时,工具默认会带上这些完整的头信息,所以能成功请求。

解决步骤

  1. 校验URL一致性
    确保Go代码中使用的URL和手动请求的完全一致:https://reddit.com/r/investimentos/best/.rss?sort=new,包括.rss路径和sort=new查询参数,任何细微差异都可能触发拦截。

  2. 补充完整请求头
    在创建请求时,除了User-Agent,添加浏览器常用的请求头,模拟正常的浏览器请求:

    • Accept:指定接受的内容类型
    • Accept-Language:可选,指定语言偏好
  3. 使用纯净的HTTP客户端
    避免客户端自动添加干扰性头信息,或确保重定向过程中保留自定义头。

修正后的代码示例

req, err := http.NewRequest(http.MethodGet, "https://reddit.com/r/investimentos/best/.rss?sort=new", nil)
if err != nil {
    // 处理错误逻辑
}

// 与手动请求一致的User-Agent
req.Header.Set("User-Agent", "MyRssClient/1.0 (Operated by BurnInNoia)")
// 添加Accept头,模拟浏览器行为
req.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
// 可选:添加语言偏好头
req.Header.Set("Accept-Language", "en-US,en;q=0.5")

client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
    // 处理错误逻辑
}
defer resp.Body.Close()

额外排查方向

如果问题仍存在,可以尝试:

  • 检查本地代理、VPN是否干扰请求路径
  • 临时替换为浏览器默认User-Agent(如Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36)测试,确认是否为自定义User-Agent的问题

内容的提问来源于stack exchange,提问作者Camopy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:16:11