golang开发中实现http请求定向

  介绍

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请求定向