首頁 >後端開發 >Golang >Go中如何取得HTTP重定向後的最終URL?

Go中如何取得HTTP重定向後的最終URL?

Linda Hamilton
Linda Hamilton原創
2024-11-18 07:45:03236瀏覽

How to Get the Final URL After HTTP Redirection in Go?

取得HTTP請求中重定向後的最終URL

使用http.NewRequest發起HTTP請求時,可能會遇到需要解壓縮的情況即使客戶端遇到重定向,也可以從最終URL 查詢字串。但是,您可能在 Response 物件中找不到此資訊。

解:

取得最終 URL 的一種方法是在 CheckRedirect 中使用匿名函數http.Client 結構的欄位。此匿名函數用作每次重定向之前執行的回調,以捕獲請求的 URL。

以下是一個範例:

import (
    "errors"
    "fmt"
    "io"
    "log"
    "net/http"
)

func main() {
    req, err := http.NewRequest("GET", "https://example.com/path", nil)
    if err != nil {
        log.Fatal(err)
    }

    cl := http.Client{}
    var lastUrlQuery string

    // Custom CheckRedirect function to capture the final URL before each redirect
    cl.CheckRedirect = func(req *http.Request, via []*http.Request) error {
        if len(via) > 10 {
            return errors.New("too many redirects")
        }
        lastUrlQuery = req.URL.RequestURI()
        return nil
    }

    resp, err := cl.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    // Use the lastUrlQuery variable to access the final URL after any redirects
    fmt.Printf("Last URL Query: %s\n", lastUrlQuery)

    // Read the response body for further processing
    io.Copy(io.Discard, resp.Body)
}

在這個腳本中,匿名函式被指派給 CheckRedirect http.Client 的欄位。此匿名函數在每次重定向發生之前將 lastUrlQuery 變數設定為請求的 URL。因此,您可以在發生任何重定向後檢索請求的最終 URL。

以上是Go中如何取得HTTP重定向後的最終URL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn