Maison >développement back-end >Golang >Comment interroger des URL dans Go sans suivre les redirections ?

Comment interroger des URL dans Go sans suivre les redirections ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-24 20:13:46791parcourir

How to Query URLs in Go without Following Redirects?

Interrogation d'URL sans redirection dans Go

Dans les tests de benchmark pour un script de redirection, il est nécessaire d'interroger une URL sans lancer de redirection automatique . Cela nécessite d'empêcher le programme de télécharger le contenu redirigé tout en enregistrant l'URL de redirection ou toute erreur associée.

Solution 1 : Utiliser http.DefaultTransport.RoundTrip

Une approche consiste à exploiter la fonction http.DefaultTransport.RoundTrip() dans votre http.Request. Contrairement à http.Client, Transport ne suit pas automatiquement les redirections :

req, err := http.NewRequest("GET", "http://example.com/redirectToAppStore", nil)
// ...
resp, err := http.DefaultTransport.RoundTrip(req)

Cependant, cette solution peut rencontrer des problèmes de performances et des erreurs dans des scénarios de charge élevée.

Solution 2 : Paramétrage CheckRedirect to False

Alternativement, vous pouvez modifier le champ CheckRedirect du http.Client pour désactiver l'automatique redirections :

client := &http.Client{
    CheckRedirect: func(req *http.Request, via []*http.Request) error {
        return http.ErrUseLastResponse
    },
}
// ...
resp, err := client.Get("http://example.com/redirectToAppStore")

Cette méthode garantit des performances cohérentes, mais elle ne garantit pas la fermeture des connexions après chaque requête.

Assurer la fermeture de la connexion

Pour imposer la fermeture de la connexion, vous pouvez créer un nouveau client HTTP pour chaque requête :

for i := 0; i < n; i++ {
    client := &http.Client{
        CheckRedirect: func(req *http.Request, via []*http.Request) error {
            return http.ErrUseLastResponse
        },
    }
    resp, err := client.Get("http://example.com/redirectToAppStore")
    // ...
}

Cette approche garantit que chaque requête utilise une nouvelle connexion, éviter les problèmes de performances dus à la réutilisation des connexions.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn