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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-06 02:16:13155ブラウズ

How Can I Query URLs in Go Without Following Redirects?

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

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