Golang 获取 HTTP 请求的 redirect URL

在开发中经常使用 HTTP 请求去抓取一些东西,有些时候会遇到站点 301、302 跳转,而且 Golang 默认是跟踪这些跳转的,但有些时候我们希望获取到目标地址的链接,这个时候应该怎么做呢?
自定义 HTTP Client 重写 CheckRedirect 方法即可。

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("https://lifelonglearning.cc")

  if err != nil {
    fmt.Println(err)
  }

  fmt.Println("StatusCode:", resp.StatusCode)
  fmt.Println(resp.Request.URL)
}

然后就获取到了跳转之后的真实链接

StatusCode: 301
https://www.lifelonglearning.cc

这个小技巧可以应用于短网址还原之类的服务中。

Last modification:March 28th, 2018 at 11:47 pm

Leave a Comment