Http.Go での最終 URL の取得
リダイレクトを含む一連の HTTP リクエストの後に、どのようにして最終 URL を抽出しますか?提供されたコードは http.NewRequest を使用してリクエストを開始しますが、Response オブジェクトには最終 URL のフィールドが含まれていません。
解決策:
1 つの方法は次のとおりです。匿名関数と http.Client.CheckRedirect を利用します。カスタム CheckRedirect 関数を定義すると、リダイレクト前の最後の URL クエリをキャプチャできます。次に例を示します。
import ( "fmt" "io" "net/http" ) func main() { req, err := http.NewRequest("GET", "https://example.com", nil) if err != nil { // Handle error } cl := http.Client{} var lastUrlQuery string 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 { // Handle error } io.Copy(io.Discard, resp.Body) fmt.Printf("Last URL query: %s\n", lastUrlQuery) }
このコードでは、lastUrlQuery は各リダイレクトの前に URL クエリをキャプチャします。リダイレクト チェーンが完了するか、制限 (この例では 10 に設定) に達すると、最終的な URL クエリが lastUrlQuery.
に保存されます。以上がGo で HTTP リダイレクト後の最終 URL を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。