В golang, как определить конечный URL-адрес после серии переадресаций?

Итак, я использую пакет net/http. Я получаю URL, который, как я знаю, перенаправляется. Он может даже перенаправляться пару раз, прежде чем приступать к окончательному URL. Перенаправление выполняется автоматически за кадром.

Есть ли простой способ выяснить, какой конечный URL-адрес был без хакерского обходного пути, который включает установку поля CheckRedirect в объекте http.Client?

Я думаю, я должен упомянуть, что я думаю, что придумал обходной путь, но он вроде хакерский, поскольку он включает использование глобальной переменной и установку поля CheckRedirect в пользовательский http.Client.

Там должен быть более чистый способ сделать это. Я надеюсь на что-то вроде этого:

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)
}

Ответы

Ответ 1

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/info/16784419/in-golang-how-to-determine-the-final-url-after-a-series-of-redirects