Récupération de l'URL finale après la redirection dans les requêtes HTTP
Lorsque vous utilisez http.NewRequest pour lancer des requêtes HTTP, vous pouvez rencontrer le besoin d'extraire chaînes de requête à partir de l'URL finale, même lorsque le client rencontre une redirection. Cependant, vous ne trouverez peut-être pas ces informations facilement disponibles dans l'objet Response.
Solution :
Une approche pour obtenir l'URL finale consiste à utiliser une fonction anonyme dans CheckRedirect. champ de la structure http.Client. Cette fonction anonyme sert de rappel exécuté avant chaque redirection pour capturer l'URL de la requête.
Voici un exemple :
import ( "errors" "fmt" "io" "log" "net/http" ) func main() { req, err := http.NewRequest("GET", "https://example.com/path", nil) if err != nil { log.Fatal(err) } cl := http.Client{} var lastUrlQuery string // Custom CheckRedirect function to capture the final URL before each redirect cl.CheckRedirect = func(req *http.Request, via []*http.Request) error { if len(via) > 10 { return errors.New("too many redirects") } lastUrlQuery = req.URL.RequestURI() return nil } resp, err := cl.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close() // Use the lastUrlQuery variable to access the final URL after any redirects fmt.Printf("Last URL Query: %s\n", lastUrlQuery) // Read the response body for further processing io.Copy(io.Discard, resp.Body) }
Dans ce script, une fonction anonyme est affectée au CheckRedirect champ de http.Client. Cette fonction anonyme définit la variable lastUrlQuery sur l'URL de la requête avant chaque redirection. En conséquence, vous pouvez récupérer l'URL finale de la demande après les éventuelles redirections.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!