2016-01-29 15 views
5

Wysyłam żądanie do serwera, ale zwraca stronę internetową. Czy istnieje sposób na uzyskanie adresu URL strony internetowej?jak uzyskać adres URL przekierowania zamiast zawartości strony w golangu?

package main 

import (
    "fmt" 
    "io/ioutil" 
    "net/http" 
) 

func main() { 
    req, err := http.NewRequest("GET", "https://www.google.com", nil) 
    if err != nil { 
     panic(err) 
    } 

    client := new(http.Client) 
    response, err := client.Do(req) 
    if err != nil { 
     panic(err) 
    } 
    fmt.Println(ioutil.ReadAll(response.Body)) 
} 
+0

możliwe duplikaty: http://stackoverflow.com/questions/24518945/ http://stackoverflow.com/questions/29865691/, http://stackoverflow.com/questions/27814942/ – JimB

Odpowiedz

12

Należy sprawdzić przekierowanie i zatrzymać (przechwycić) je. Jeśli przechwycisz przekierowanie, możesz uzyskać adres URL przekierowania (do którego nastąpiło przekierowanie) za pomocą metody lokalizacji struktury odpowiedzi.

package main 

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

func main() { 
    req, err := http.NewRequest("GET", "https://www.google.com", nil) 
    if err != nil { 
     panic(err) 
    } 
    client := new(http.Client) 
    client.CheckRedirect = func(req *http.Request, via []*http.Request) error { 
     return errors.New("Redirect") 
    } 

    response, err := client.Do(req) 
    if err != nil { 
     if response.StatusCode == http.StatusFound { //status code 302 
      fmt.Println(response.Location()) 
     } else { 
      panic(err) 
     } 
    } 

} 
Powiązane problemy