golang 控制重定向


本文摘自网络,作者,侵删。

在Client的字段中,有一个 CheckRedirect,此字段就是用来控制重定向的函数,如果没有定义此字段的话,将会使用默认的 defaultCheckRedirect 方法。

默认的转发策略是最多转发10次。

在转发的过程中,某一些包含安全信息的Header,比如AuthorizationWWW-AuthenticateCookie等,如果转发是跨域的,那么这些Header不会复制到新的请求中。

http的重定向判断会默认处理以下状态码的请求:

301 (Moved Permanently)
302 (Found)
303 (See Other)
307 (Temporary Redirect)
308 (Permanent Redirect)
301、302和303请求将会改用Get访问新的请求,而307和308会使用原有的请求方式。

那么,我们如何去控制重定向的次数,甚至是禁止重定向呢?这里其实就需要我们自己去实现一个CheckRedirect函数了,首先我们来看看默认的defaultCheckRedirect方法:

func defaultCheckRedirect(req *Request, via []*Request) error {
   if len(via) >= 10 {
       return errors.New("stopped after 10 redirects")
   }
   return nil
}

第一个参数req是即将转发的request,第二个参数 via是已经请求过的requests。可以看到其中的逻辑是判断请求过的request数量,大于等于10的时候返回一个error,这也说明默认的最大重定向次数为10次,当此函数返回error时,即是重定向结束的时候。

所以如果需要设置重定向次数,那么复制一份这个函数,修改函数名字和其中if判断的数字,然后在生成Client时设定到Client即可:

client := &http.Client{
   CheckRedirect: yourCheckRedirect,
}

或者:

client := &http.Client{}
client.CheckRedirect = yourCheckRedirect

禁止重定向则可以把判断数字修改为0。最好相应地修改errors中提示的信息。


本文来自:简书

感谢作者:C的高圆圆

查看原文:golang 控制重定向

相关阅读 >>

详解Golang编译成dll文件

Golang互斥锁 sync.mutex

Golang如何实现自举?

ketos 笔记 -- 记 Go hackathon 2017

Go语言 if 语句

Golang变量、常量

Go每日一库 [Go-rate] 速率限制器

Golang常量和变量的区别

关于Go的&和*的区别以及应用场景

Golang关于for循环的用法

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...