ホームページ > バックエンド開発 > Golang > GoでHTTPリダイレクト後の最終URLを取得する方法?

GoでHTTPリダイレクト後の最終URLを取得する方法?

Linda Hamilton
リリース: 2024-11-18 07:45:03
オリジナル
226 人が閲覧しました

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

HTTP リクエストでのリダイレクト後の最終 URL の取得

http.NewRequest を利用して HTTP リクエストを開始する場合、抽出する必要がある場合があります。クライアントがリダイレクトに遭遇した場合でも、最終 URL からのクエリ文字列を取得します。ただし、この情報は Response オブジェクトですぐに入手できない場合があります。

解決策:

最終 URL を取得する方法の 1 つは、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート