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
Susan SarandonOriginal
2024-11-24 20:13:46846Durchsuche

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)

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")

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")
    // ...
}

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!

Stellungnahme:
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