Go 的 http.Client 默认自动跟随 HTTP 3xx 重定向(最多 10 次),可通过设置 CheckRedirect 字段自定义行为:设为 nil 或返回 http.ErrUseLastResponse 可禁用;实现函数可限制次数、校验域名、记录路径;禁用后亦可手动解析 Location 头发起新请求。
Go 的 http.Client 默认会自动跟随 HTTP 3xx 重定向(如 301、302、307、308),无需额外代码。但若需自定义行为(如限制跳转次数、记录跳转路径、禁用自动跳转或手动处理 Location),则需调整 Client.CheckRedirect 字段。
标准 http.Get 或 http.DefaultClient.Do 已启用自动跳转,最多 10 次(由 http.DefaultClient.CheckRedirect 控制)。例如:
resp, err := http.Get("https://httpbin.org/redirect/3")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
fmt.Println(resp.StatusCode) // 输出 200(已自动跳完3次)
将 CheckRedirect 设为 nil 或返回 http.ErrUseLastResponse 即可终止跳转,直接返回首次响应:
client := &http.Client{
CheckRedirect: nil, // 禁用重定向
}
resp, err := client.Get("https://httpbin.org/redirect/1")
// resp.StatusCode == 302,Body 包含原始响应内容
client := &http.Client{
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse // 返回此错误即停止跳转
},
}
通过实现 CheckRedirect 函数,可控制跳转条件。常见用途包括:
var redirectLog []string
client := &http.Client{
CheckRedirect: func(req *http.Request, via []*http.Request) error {
if len(via) >= 3 {
return fmt.Errorf("stopped after 3 redirects")
}
// 记录跳转
lastResp := via[len(via)-1].Response
redirectLog = append(redirectLog, fmt.Sprintf("%d → %s", lastResp.StatusCode, req.URL.String()))
return nil // 继续跳转
},
}
若禁用自动跳转后想自行处理(如改用 POST 继续、添加认证头等),可读取 Location 头并构造新请求:
client := &http.Client{CheckRedirect: nil}
resp, _ := client.Get("https://httpbin.org/redirect-to?url=/get&status=302")
defer resp.Body.Close()
if resp.StatusCode >= 300 && resp.StatusCode < 400 {
if loc := resp.Header.Get("Location"); loc != "" {
u, _ := url.Parse(loc)
newReq, _ := http.NewRequest("GET", u.String(), nil)
newReq.Header.Set("User-Agent", "my-app/1.0")
finalResp, _ := client.Do(newReq)
defer finalResp.Body.Close()
// 处理 finalR
esp
}
}
不复杂但容易忽略:重定向时请求方法可能变化(如 302 会把 POST 变成 GET),若需保持方法,应使用 307 或 308 状态码,或手动构造请求。
# go
# golang
# app
# 状态码
# red
# nil
# 并发
# location
# http
# 跳转
# 重定向
# 设为
# 自定义
# 最多
# 若需
# 首次
# 会把
# 可通过
# 亦可
相关文章:
岳西云建站教程与模板下载_一站式快速建站系统操作指南
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
购物网站制作公司有哪些,哪个购物网站比较好?
如何在阿里云ECS服务器部署织梦CMS网站?
开心动漫网站制作软件下载,十分开心动画为何停播?
建站之星云端配置指南:模板选择与SEO优化一键生成
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何通过免费商城建站系统源码自定义网站主题与功能?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
北京企业网站设计制作公司,北京铁路集团官方网站?
已有域名如何免费搭建网站?
如何在建站之星绑定自定义域名?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
香港服务器网站卡顿?如何解决网络延迟与负载问题?
深圳网站制作的公司有哪些,dido官方网站?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
宿州网站制作公司兴策,安徽省低保查询网站?
如何快速搭建安全的FTP站点?
英语简历制作免费网站推荐,如何将简历翻译成英文?
公司门户网站制作流程,华为官网怎么做?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
免费网站制作appp,免费制作app哪个平台好?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
在线制作视频的网站有哪些,电脑如何制作视频短片?
制作企业网站建设方案,怎样建设一个公司网站?
文字头像制作网站推荐软件,醒图能自动配文字吗?
,石家庄四十八中学官网?
建站之星代理费用多少?最新价格详情介绍
建站之星安装后界面空白如何解决?
如何快速生成高效建站系统源代码?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
如何在阿里云部署织梦网站?
南宁网站建设制作定制,南宁网站建设可以定制吗?
如何在宝塔面板中创建新站点?
建站之星客服服务时间及联系方式如何?
建站主机是什么?如何选择适合的建站主机?
Android滚轮选择时间控件使用详解
如何在搬瓦工VPS快速搭建网站?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
建站三合一如何选?哪家性价比更高?
七夕网站制作视频,七夕大促活动怎么报名?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
表情包在线制作网站免费,表情包怎么弄?
C#如何在一个XML文件中查找并替换文本内容
小程序网站制作需要准备什么资料,如何制作小程序?
如何通过网站建站时间优化SEO与用户体验?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
*请认真填写需求信息,我们会在24小时内与您取得联系。