بررسی قواعد NO_PROXY در .NET با HttpClient.DefaultProxy.IsBypassed
هنگامی که 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 دیگری فراهم کرده است، بهجای آن پروکسی واقعی handler را بررسی کنید. محیط موردنظر را پیش از مقداردهی اولیهٔ پروکسی پیشفرض تنظیم کنید.
اینها قواعد مستند .NET هستند. نتیجهٔ curl با همان رشته ثابت نمیکند که کلاینت دیگری همان مسیر را انتخاب کرده است، و تصمیم معافیت همچنان به دسترسی مستقیم شبکه نیاز دارد.