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

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

Barbara Streisand
リリース: 2024-12-07 14:10:14
オリジナル
688 人が閲覧しました

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

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