Go でリダイレクトを使用せずに URL をクエリする
この記事では、Go で自動リダイレクトをトリガーせずに URL をクエリする問題について説明します。これは多くの場合、ベンチマークの目的や、リダイレクト URL やエラーをログに記録する必要がある場合にのみ必要になります。
解決策 1: http.DefaultTransport.RoundTrip を使用する
http を作成するいつものように .Request オブジェクト。これを http.Client に渡す代わりに、http.DefaultTransport.RoundTrip() を使用してリクエストを作成します。これにより、http.Client の組み込みリダイレクト処理がバイパスされます。
import "net/http" func QueryURLWithoutRedirect(url string) (*http.Response, error) { req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err } return http.DefaultTransport.RoundTrip(req) }
解決策 2: CheckRedirect でリダイレクトを無効にする
CheckRedirect フィールドを設定して http.Client を作成します。ゼロに。これにより、クライアントがリダイレクトに従わないように構成されます。
import "net/http" func QueryURLWithoutRedirect(url string) (*http.Response, error) { client := &http.Client{ CheckRedirect: nil, } return client.Get(url) }
その他の考慮事項
どちらのソリューションも必要な機能を提供しますが、最初のアプローチでは高負荷時にパフォーマンスの問題が発生する可能性があります。 、途中で閉じられた接続を再利用する可能性があるため。
各クエリが 2 番目のクエリと新しい接続を開くようにするため。このアプローチでは、ループ内のリクエストごとに新しい http.Client を作成できます。ただし、Go はアイドル状態の接続を一定期間後に自動的に閉じるため、これは必要ない場合があります。
最終的に、アプローチの選択は、特定のパフォーマンス要件と現実のシナリオで望む動作によって決まります。
以上がリダイレクトをたどらずに Go で URL をクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。