go中http客户端设置当响应码为3xx时禁止自动跳转
通常在http客户端请求的时候,如果遇到响应码为3XX,并且header中也有 Location
字段时,go的 net/http
库会自动完成跳转
但是现实场景是,有时咱们需要对跳转前的数据做处理,然后再手动跳转
这个时候该怎么办呢?
在Go中,可以通过自定义http.Client的CheckRedirect函数来禁用自动重定向。
CheckRedirect函数允许你控制是否要跳转以及如何跳转。
若CheckRedirect函数返回http.ErrUseLastResponse,则客户端不会执行自动重定向。
package main
import (
"fmt"
"net/http"
)
func main() {
client := &http.Client{
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse // 禁用自动跳转
},
}
// 假设这个链接会跳转
resp, err := client.Get("http://example.com")
if err != nil {
fmt.Println("请求失败:", err)
return
}
defer resp.Body.Close()
fmt.Println("响应状态码:", resp.StatusCode)
}
在上述示例中,我们创建了一个自定义的http.Client对象,并将其CheckRedirect字段设置为一个匿名函数。
这个函数返回http.ErrUseLastResponse错误,这样就禁用了自动跳转。
当客户端遇到重定向时,该函数将被调用。
由于我们返回了特定的错误,客户端将使用最后一次的响应而不会自动跳转。
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/17559596.html