http - 在golang中,如何确定一系列重定向后的最终URL?

标签 http go

所以,我使用的是 net/http 包。我正在获取一个我肯定知道正在重定向的 URL。它甚至可能在登陆最终 URL 之前重定向几次。重定向在后台自动处理。

有没有一种简单的方法可以找出最终 URL 是什么,而无需在 http.Client 对象上设置 CheckRedirect 字段的骇人听闻的解决方法?

我想我应该提一下,我想我想出了一个解决方法,但它有点骇人听闻,因为它涉及使用全局变量并在自定义 http.Client 上设置 CheckRedirect 字段。

必须有一种更清洁的方式来做到这一点。我希望是这样的:

package main

import (
  "fmt"
  "log"
  "net/http"
)

func main() {
  // Try to GET some URL that redirects.  Could be 5 or 6 unseen redirections here.
  resp, err := http.Get("http://some-server.com/a/url/that/redirects.html")
  if err != nil {
    log.Fatalf("http.Get => %v", err.Error())
  }

  // Find out what URL we ended up at
  finalURL := magicFunctionThatTellsMeTheFinalURL(resp)

  fmt.Printf("The URL you ended up at is: %v", finalURL)
}

最佳答案

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    resp, err := http.Get("http://stackoverflow.com/q/16784419/727643")
    if err != nil {
        log.Fatalf("http.Get => %v", err.Error())
    }

    // Your magic function. The Request in the Response is the last URL the
    // client tried to access.
    finalURL := resp.Request.URL.String()

    fmt.Printf("The URL you ended up at is: %v\n", finalURL)
}

输出:

The URL you ended up at is: http://stackoverflow.com/questions/16784419/in-golang-how-to-determine-the-final-url-after-a-series-of-redirects

关于http - 在golang中,如何确定一系列重定向后的最终URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16784419/

相关文章:

go - 调用cgo宏函数

go - 为什么 Println() 调用错误接口(interface)的行为?

java - 使用 PHP 从 Java 客户端上传文件不起作用

node.js - 快速路由定义前导斜杠是否有技术原因?

go - 在 golang 中,我的 go 例程使用了所有内核,但每个内核只使用了 50% 到 75%

go - 通过 channel 在 Go 中进行通信

json - 将复杂的 JSON 解码为结构并访问数据( slice 的 slice )

http - 对于健康检查失败,我应该使用哪个 HTTP 状态代码?

python - 在特定时间发送 Http 请求

java - 完整 url 编码的引用实现/.lib