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!