package main
import (
"errors"
"fmt"
"net/http"
)
func redirectLimitTimes() {
// 限制重定向的次数
client := &http.Client{
CheckRedirect: func(req *http.Request, via []*http.Request) error {
if len(via) > 10 {
return errors.New("redirect too times")
}
return nil
},
}
request, _ := http.NewRequest(
http.MethodGet,
"http://httpbin.org/redirect/20",
nil,
)
_, err := client.Do(request)
if err != nil {
panic(err)
}
}
func redirectForbidden() {
// 禁止重定向
// 登录请求,防止重定向到首页
client := &http.Client{
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse
},
}
request, _ := http.NewRequest(
http.MethodGet,
"http://httpbin.org/cookies/set?name=poloxue",
nil,
)
r, err := client.Do(request)
if err != nil {
panic(err)
}
defer func() {_ = r.Body.Close()}()
fmt.Println(r.Request.URL)
}
func main() {
// 重定向
// 返回一个状态码,3xx 301 302 303 307 308
redirectForbidden()
}