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 サイトの他の関連記事を参照してください。