Heim > Backend-Entwicklung > Golang > Wie frage ich URLs in Go ab, ohne Weiterleitungen zu folgen?

Wie frage ich URLs in Go ab, ohne Weiterleitungen zu folgen?

Susan Sarandon
Freigeben: 2024-11-24 20:13:46
Original
838 Leute haben es durchsucht

How to Query URLs in Go without Following Redirects?

Abfragen von URLs ohne Umleitung in Go

Bei Benchmark-Tests für ein Weiterleitungsskript ist es notwendig, eine URL abzufragen, ohne eine automatische Weiterleitung zu initiieren . Dazu muss verhindert werden, dass das Programm den umgeleiteten Inhalt herunterlädt, während gleichzeitig die Umleitungs-URL oder damit verbundene Fehler protokolliert werden.

Lösung 1: Verwendung von http.DefaultTransport.RoundTrip

Ein Ansatz besteht darin, die Funktion http.DefaultTransport.RoundTrip() in Ihrer http.Request zu nutzen. Im Gegensatz zu http.Client folgt Transport nicht automatisch Weiterleitungen:

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

Bei dieser Lösung können jedoch in Hochlastszenarien Leistungsprobleme und Fehler auftreten.

Lösung 2: Einstellung CheckRedirect auf False

Alternativ können Sie das CheckRedirect-Feld des http.Client ändern, um die automatische Funktion zu deaktivieren Weiterleitungen:

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

Diese Methode gewährleistet eine konsistente Leistung, garantiert jedoch nicht das Schließen von Verbindungen nach jeder Abfrage.

Gewährleistung des Verbindungsabschlusses

Um das Schließen der Verbindung zu erzwingen, können Sie für jede Anfrage einen neuen HTTP-Client erstellen:

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")
    // ...
}
Nach dem Login kopieren

Dieser Ansatz stellt sicher, dass jede Abfrage eine neue Verbindung verwendet. Verhinderung von Leistungsproblemen aufgrund der Wiederverwendung von Verbindungen.

Das obige ist der detaillierte Inhalt vonWie frage ich URLs in Go ab, ohne Weiterleitungen zu folgen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage