ข้อมูลรับรอง .NET ใดเป็นของพร็อกซี?
แยก WebProxy.Credentials ข้อมูลรับรองเซิร์ฟเวอร์ปลายทาง และ DefaultProxyCredentials เมื่อตรวจสอบตัวตนกับพร็อกซี HTTP
สำหรับ WebProxy ที่สร้างเอง ให้ตั้งบัญชีพร็อกซีบนออบเจ็กต์นั้น พร็อพเพอร์ตีข้อมูลรับรอง .NET อื่นมีผู้รับต่างกัน:
| พร็อพเพอร์ตี | ผู้รับ |
|---|---|
WebProxy.Credentials | พร็อกซีที่ออบเจ็กต์นั้นแทนอยู่ |
HttpClientHandler.Credentials | เซิร์ฟเวอร์ปลายทาง |
DefaultProxyCredentials | พร็อกซีเริ่มต้นของระบบเมื่อ Proxy เป็น null และ UseProxy เป็น true |
ตัวอย่าง .NET 10 นี้ให้พร็อกซีที่กำหนดชัดเจนและบัญชีของมันเอง:
using System;
using System.Net;
using System.Net.Http;
string password = Environment.GetEnvironmentVariable("PROXY_PASSWORD")
?? throw new InvalidOperationException("Set PROXY_PASSWORD");
var proxy = new WebProxy("http://203.0.113.10:8080")
{
Credentials = new NetworkCredential("proxy-user", password)
};
using var handler = new HttpClientHandler
{
Proxy = proxy,
UseProxy = true
};
using var client = new HttpClient(handler)
{
Timeout = TimeSpan.FromSeconds(15)
};
using var response = await client.GetAsync("https://example.com/");
Console.WriteLine((int)response.StatusCode);
แทนปลายทางตัวอย่างในเอกสารและใช้บัญชีที่ผู้ให้บริการให้ รายการที่ไม่ต้องยืนยันตัวตนไม่จำเป็นต้องสร้างข้อมูลเข้าสู่ระบบขึ้นมา เนื่องจากกำหนด Proxy ของแฮนเดลอร์ชัดเจน DefaultProxyCredentials จึงไม่ใช่ตัวแทนของ WebProxy.Credentials
UseDefaultCredentials มีขอบเขตตามออบเจ็กต์ด้วย การยืนยันตัวตนเซิร์ฟเวอร์ของแฮนเดลอร์กับการยืนยันตัวตนพร็อกซีของ WebProxy ต่างกัน การส่งบัญชีผู้ใช้ของโปรเซสไม่ใช่คำตอบทั่วไปต่อ 407
ถ้าคำท้าทายการยืนยันตัวตนยังมี ให้ตรวจวิธีจริง ปลายทางที่เลือก และอินสแตนซ์ไคลเอนต์/แฮนเดลอร์ การยืนยันตัวตนพร็อกซีอาจเกิดก่อน TLS ปลายทาง ดังนั้นเฮดเดอร์ Authorization ของเว็บไซต์ตอบมันไม่ได้ การรองรับยังขึ้นกับแฮนเดลอร์ แพลตฟอร์ม บริการ และนโยบายติดตั้ง ไม่ต้องเปลี่ยนพร็อกซี Windows ทั้งระบบ