2013-05-28 10 views
18

Używam pakietu net/http. Dostaję URL, który znam na pewno przekierowuje. Może nawet przekierować kilka razy przed lądowaniem na końcowym adresie URL. Przekierowanie jest obsługiwane automatycznie za kulisami.W języku golang, jak ustalić końcowy URL po serii przekierowań?

Czy istnieje prosty sposób sprawdzenia, jaki jest końcowy URL bez hackowatego obejścia, które wymaga ustawienia pola CheckRedirect na obiekcie http.Client?

Przypuszczam, że powinienem wspomnieć, że myślę, że wymyśliłem obejście, ale jest to rodzaj hackish, ponieważ wymaga użycia zmiennej globalnej i ustawienie pola CheckRedirect na niestandardowym http.Client.

Musi to być czystszy sposób na zrobienie tego. Mam nadzieję, że na coś takiego:

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

przykro mi, że nie mają prawdziwy adres URL, aby pracować. To jest dla mojej pracy i witryny, z którą pracuję wymaga poświadczeń, itp. –

+3

możliwy duplikat [Jak pobrać docelowy adres URL podczas korzystania z pakietu http w Go?] (Http://stackoverflow.com/questions/ 16532436/how-to-retrieve-the-final-url-destination-while-using-the-http-package-in-go) – peterSO

Odpowiedz

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

wyjściowa:

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 
+0

dzięki za odpowiedź! To zadziałało dla mnie tak, jak pokazałeś. Przepraszam, że zajęło mi dużo czasu, aby oznaczyć to jako poprawną odpowiedź. Niektóre elementy o wyższym priorytecie pojawiły się w pracy. –

Powiązane problemy