ホームページ > バックエンド開発 > Golang > リダイレクトをたどらずにGoでURLをクエリするにはどうすればよいですか?

リダイレクトをたどらずにGoでURLをクエリするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-24 20:13:46
オリジナル
838 人が閲覧しました

How to Query URLs in Go without Following Redirects?

Go でリダイレクトなしで URL をクエリする

リダイレクト スクリプトのベンチマーク テストでは、自動リダイレクトを開始せずに URL をクエリする必要があります。これには、リダイレクト URL または関連するエラーをログに記録しながら、プログラムがリダイレクトされたコンテンツをダウンロードしないようにする必要があります。

解決策 1: http.DefaultTransport.RoundTrip を使用する

1 つのアプローチhttp.Request 内の http.DefaultTransport.RoundTrip() 関数を利用することです。 http.Client とは異なり、トランスポートは自動的にリダイレクトに従いません:

req, err := http.NewRequest("GET", "http://example.com/redirectToAppStore", nil)
// ...
resp, err := http.DefaultTransport.RoundTrip(req)
ログイン後にコピー

ただし、このソリューションでは、高負荷のシナリオではパフォーマンスの問題やエラーが発生する可能性があります。

解決策 2: 設定CheckRedirect を False

に設定する代わりに、http.Client の CheckRedirect フィールドを変更することもできます。自動リダイレクトを無効にするには:

client := &http.Client{
    CheckRedirect: func(req *http.Request, via []*http.Request) error {
        return http.ErrUseLastResponse
    },
}
// ...
resp, err := client.Get("http://example.com/redirectToAppStore")
ログイン後にコピー

このメソッドは一貫したパフォーマンスを保証しますが、各クエリ後の接続の終了を保証するものではありません。

接続の終了を確実にする

接続を強制的に閉じるには、それぞれに対して新しい HTTP クライアントを作成できます。 request:

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")
    // ...
}
ログイン後にコピー

このアプローチにより、各クエリで新しい接続が使用されるようになり、接続の再利用によるパフォーマンスの問題が防止されます。

以上がリダイレクトをたどらずにGoでURLをクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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