首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在golang中,如何在一系列重定向之后确定最终的URL?

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

Stack Overflow用户
提问于 2013-05-28 13:23:20
回答 2查看 14.5K关注 0票数 29

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

有没有一种简单的方法可以找出最终的URL是什么,而不需要在http.Client对象上设置CheckRedirect字段?

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

一定有一种更干净的方法来做这件事。我希望是这样的:

代码语言:javascript
复制
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)
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-28 14:35:31

代码语言:javascript
复制
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)
}

输出:

代码语言:javascript
复制
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
票数 81
EN

Stack Overflow用户

发布于 2021-06-19 16:00:29

我要补充一点,http.Head方法应该足以检索最终的URL。从理论上讲,与http.Get相比,它应该更快,因为服务器应该只发回一个报头:

代码语言:javascript
复制
resp, err := http.Head("http://stackoverflow.com/q/16784419/727643")
...
finalURL := resp.Request.URL.String()
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16784419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档