golang开发中实现http请求重定向?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强>实现代码强>
看下实现的简单代码
函数main () { 客户:=,http.Client {} url:=癶ttp://www.qq.com" 点播,犯错:=http.NewRequest (“GET", url, nil) 如果犯错!=nil { 恐慌(err) } 反应,_:=client.Do(要求) fmt.Println (response.Status) } curl http://www.qq.com & lt; html> & lt; head> & lt; title> 302 Found & lt;/head> & lt;身体背景=皐hite"祝辞 & lt; center> & lt; h2> 302 Found & lt;/center> & lt; hr> & lt; center> stgw/1.3.12.4_1.13.5 & lt;/body> & lt;/html>
我们知道在浏览器里面输入302年http://www.qq.com会跳转到https://www.qq.com。我们使用旋度可以看到使用302的跳转。
可是我只想获取第一跳的的响应的状态码。发现没法实现了,所以看了下源码。
看了下客户。做源码实现
607呃=c。checkRedirect(请求,请求)
代码的上下文,可以看出要求的是将要请求的请求,请求已经请求过的请求
主要看下checkRedirect
func (c *客户端)checkRedirect(点播请求,通过[]*请求)错误{ fn:=c.CheckRedirect 如果fn==nil { fn=defaultCheckRedirect } 通过返回fn(要求) }
可以看到如果设置了checkRedirect就执行checkRedirect,如果没有设置就执行defaultCheckRedirect。
再看下defaultCheckRedirect
func defaultCheckRedirect(要求*请求,通过[]*请求)错误{ 如果len(通过)祝辞=10 { 返回errors.New(“停止10 redirects"后) } 返回nil }
可以看到最多可以重定向10次,如果大于10的跳转就抛出错误结束这次请求了。
大体上流程已经搞明白,只要设置checkRedirect返回错误,理论上就能实现只请求一次的目的。
函数main () { 客户:=,http.Client {} url:=癶ttp://www.qq.com" 点播,犯错:=http.NewRequest (“GET", url, nil) 如果犯错!=nil { 恐慌(err) } 客户端。CheckRedirect=func (http请求*。请求,通过[]{* http.Request)错误 返回fmt.Errorf(“第一response") } 反应,_:=client.Do(要求) fmt.Println (response.StatusCode) }/私人/var/文件夹/4 h/lrsc4fyd12v9ctl31ggk5ckc0000gp/T/___go_build_main_go # gosetup 302年
其实,在CheckRedirect方法上面有一行说明,
ErrUseLastResponse可以返回客户端。CheckRedirect钩子来控制如何处理重定向。如果返回,下一个请求是不发送和返回最近的响应与其身体打开。
客户端。CheckRedirect挂钩可以返回ErrUseLastResponse,以控制如何处理重定向。如果返回,则不发送下一个请求,并且返回最近的响应且其主体未关闭。
引用>可以看到返回ErrUseLastResponse是官方的建议的设置
最终的代码实现应该是这样的。
函数main () { 客户:=,http.Client {} url:=癶ttp://www.qq.com" 点播,犯错:=http.NewRequest (“GET", url, nil) 如果犯错!=nil { 恐慌(err) } 客户端。CheckRedirect=func (http请求*。请求,通过[]{* http.Request)错误 返回http.ErrUseLastResponse } 反应,_:=client.Do(要求) fmt.Println (response.StatusCode) }关于golang开发中实现http请求重定向问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
golang开发中实现http请求定向