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
Libérer: 2024-11-24 20:13:46
original
838 Les gens l'ont consulté

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)
Copier après la connexion

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")
Copier après la connexion

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")
    // ...
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal