HttpClient.DefaultProxy.IsBypassed で .NET の NO_PROXY ルールを確認する
HttpClient が両方でプロキシを迂回すべき場合は、ベアドメインと先頭ドット形式の両方を列挙し、その後 IsBypassed を調べます。
HttpClient のドキュメント化された環境プロキシポリシーでは、example.internal と .example.internal の一致の仕方が異なります。ベア名は親ホストを選び、先頭ドット形式はそのサブドメインを選びます。
両方を直接接続にする場合は、起動環境に両方を含めます。
export no_proxy='example.internal,.example.internal'
これらは意図する既存のバイパス一覧に統合してください。変数名が大文字と小文字を区別するシステムでは、.NET は小文字のプロキシ環境変数を先に確認し、その後に大文字を確認するため、古い no_proxy が NO_PROXY より優先されることがあります。
アプリケーション内では、宛先への HTTP 要求を送信せずに既定のセレクターを調べられます。
foreach (var host in new[] {
"example.internal", "api.example.internal", "other.internal"
})
{
var uri = new Uri("https://" + host + "/");
Console.WriteLine($"{host}: bypass={HttpClient.DefaultProxy.IsBypassed(uri)}");
}
この断片は System と System.Net.Http を使用します。アプリケーションが別の IWebProxy を明示的に指定している場合は、代わりに実際のハンドラープロキシを調べてください。既定のプロキシが初期化される前に、意図する環境を設定してください。
これらは .NET のドキュメント化されたルールです。同じ文字列を使った curl の結果は、別のクライアントが同じ経路を選んだことを証明しません。また、バイパスの判断には依然として直接のネットワーク到達性が必要です。