为了账号安全,请及时绑定邮箱和手机立即绑定

Github 您对本站的访问已在 Go Http 客户端中受到限制

Github 您对本站的访问已在 Go Http 客户端中受到限制

Go
不负相思意 2022-06-27 15:05:56
我在使用 Go 的 http 客户端从 Github 下载 zip 或 tar.gz 文件时遇到了问题。我收到一个 403 消息“您对该站点的访问已被限制”。卷曲工作正常。我在 us-west-2 区域的 AWS 上的 EC2 实例中运行它。尤其是,Ubuntu Server 16.04 LTS (HVM),SSD 卷类型 - ami-0807918df10edc141(64 位 x86)/ami-0c75fb2e6a6be38f6(64 位 Arm)信息Go:go1.15.linux-amd64(也在 14 上试过)AWS - Ubuntu Server 16.04 LTS (HVM),SSD 卷类型 - ami-0807918df10edc141(64 位 x86)/ami-0c75fb2e6a6be38f6(64 位 Arm)端点:https ://github.com/kubeflow/manifests/archive/v1.0.2.tar.gz (我也和其他人一起尝试过,没有工作)重现的示例代码:package mainimport (    "fmt"    "io/ioutil"    "net/http")func main() {    endpoint := "https://github.com/kubeflow/manifests/archive/v1.0.2.tar.gz"    // or https://api.github.com/repos/kubeflow/manifests/zipball/v0.12.0    // Get the data    resp, err := http.Get(endpoint)    if err != nil {        fmt.Printf("[error] %v", err)        return    }    defer resp.Body.Close()    respData, err := ioutil.ReadAll(resp.Body)    if err != nil {        fmt.Printf("[error] %v", err)        return    }    // Returns a 403 and html error page    fmt.Printf("Resp:\n%v\n", string(respData))}注意:以上在我的本地机器上工作正常,它似乎只是在 aws 实例中停止。谢谢!
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

该特定错误消息意味着 GitHub 正在限制您,因为您提出的请求与正在进行的滥用模式相匹配。GitHub 阻止了这种模式,因为它会引起其他用户的可用性问题。

您应该始终让您的程序使用自定义User-Agent标头,因为这将您的操作与其他人的操作区分开来。(毕竟,很多人使用 Go。)您应该通过 API 获取您正在使用的 URL,而不是github.com直接通过。您还应该尽可能进行身份验证(例如,使用令牌),因为 GitHub 会给经过身份验证的请求提供更高的限制,如果您引起问题,GitHub 可以与您联系。最后,您应该实施适当的速率限制和节流,以便在收到 403、429 或 5xx 错误时不会发出过多请求并完全退出或停止。

如果您需要为同一个存储库下载许多档案,请克隆它并使用git archive,这样效率更高。还建议缓存数据而不是多次请求。

如果你做了所有这些事情,你可能会发现你的请求有效。


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信