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