go中http客户端设置当响应码为3xx时禁止自动跳转

发布时间 2023-07-17 11:35:08作者: 厚礼蝎

通常在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错误,这样就禁用了自动跳转。

当客户端遇到重定向时,该函数将被调用。

由于我们返回了特定的错误,客户端将使用最后一次的响应而不会自动跳转。