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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-12-07 14:10:14729ブラウズ

How to Query URLs Without Redirects in Go?

Go でリダイレクトを使用しない URL のクエリ

リダイレクト スクリプトをテストする場合、リダイレクトをトリガーせずに URL をクエリする必要がある場合があります。これは、リダイレクト URL やエラーをログに記録する場合に特に便利です。 Go でこれを実現するには 2 つのアプローチがあります。

デフォルト トランスポートの使用

最初の方法では、http.DefaultTransport オブジェクトを使用します。これにより、リクエスト処理プロセス。 RoundTrip 機能を利用すると、リダイレクトを経由せずに HTTP リクエストを実行できます。

req, err := http.NewRequest("GET", "http://example.com/redirectToAppStore", nil)
// ...
resp, err := http.DefaultTransport.RoundTrip(req)

CheckRedirect フィールドを使用する

あるいは、2 番目の方法では、 http.Client の CheckRedirect フィールド。このフィールドを func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse } に設定すると、クライアントを通じて実行される後続のリクエストのリダイレクト処理が効果的に無効になります。

client := &http.Client{
    CheckRedirect: func(req *http.Request, via []*http.Request) error {
        return http.ErrUseLastResponse
    },
}
resp, err := client.Get("http://example.com/redirectToAppStore")

パフォーマンスに関する考慮事項

ベンチマークのコンテキストでは、最初の点に注意することが重要です。ソリューション (http.DefaultTransport.RoundTrip) では、多数のリクエストを並行して実行するとパフォーマンスの問題が発生します。これは、トランスポート内で接続が再利用される可能性があるためです。

個々のリクエストに個別の接続が必要なシナリオでは、2 番目の解決策 (CheckRedirect フィールド) を使用し、リクエストごとに新しいクライアントを作成することをお勧めします。これにより、各クエリの後に接続が閉じられ、再利用されなくなります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。