2016-01-29 11 views
5

Sto inviando una richiesta al server ma sta restituendo una pagina web. C'è un modo per ottenere l'URL della pagina web, invece?come ottenere l'URL di reindirizzamento invece del contenuto della pagina in golang?

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

possibili duplicati: http://stackoverflow.com/questions/24518945/ http://stackoverflow.com/questions/29865691/, http://stackoverflow.com/questions/27814942/ – JimB

risposta

12

È necessario controllare il reindirizzamento e arrestarli (acquisirli). Se si acquisisce un reindirizzamento, è possibile ottenere l'URL di reindirizzamento (a cui è stato effettuato il reindirizzamento) utilizzando il metodo di posizione della struttura di risposta.

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

}