ส่งคำขอ .NET HttpClient ผ่านพร็อกซี
ตั้ง WebProxy บน HttpClientHandler และไม่ปล่อยการใช้พร็อกซีให้ปิดอยู่หรือผูกกับไคลเอนต์ผิดตัว
คำขอต้องใช้ HttpClient ที่สร้างด้วย handler พร็อกซีของคุณ การสร้างออบเจ็กต์ WebProxy ที่ไม่เกี่ยวข้องไม่ได้เปลี่ยนเส้นทางของไคลเอนต์ตัวอื่น
using System;
using System.Net;
using System.Net.Http;
var proxy = new WebProxy("http://203.0.113.10:8080")
{
BypassProxyOnLocal = false
};
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);
Console.WriteLine(await response.Content.ReadAsStringAsync());แทนที่อยู่ตัวอย่างด้วยพร็อกซี HTTP จริงจากบริการของคุณหรือรายการพร็อกซี HTTP ไวยากรณ์ระดับบนนี้เหมาะกับโครงการคอนโซล C# สมัยใหม่ ส่วนโครงการเก่าอาจวางคำสั่งใน Main แบบอะซิงโครนัส
ตรวจทั้งสองพร็อพเพอร์ตีของ handler: Proxy เลือกเอนด์พอยต์ และ UseProxy=true เปิดใช้ หากเอนด์พอยต์ใช้ได้แยกกันแต่ในแอปไม่ได้ ให้ยืนยันว่าไม่มีโค้ดปิด UseProxy และการเรียกใช้เป็นอินสแตนซ์นี้ handler เฉพาะช่วยไม่ต้องพึ่งการค้นหาของโปรเซสหรือ OS
เมื่อผู้ดูแลพร็อกซีให้บัญชีมา ให้กำหนด NetworkCredential แก่พร็อพเพอร์ตี WebProxy.Credentials ส่วน Authorization ของเว็บไซต์ใช้กับคนละช่วง และรายการ IP:port สาธารณะไม่ได้ให้ข้อมูลเข้าสู่ระบบเริ่มต้น ลิสเทนเนอร์ http:// ส่ง HTTPS ผ่านอุโมงค์ได้ ให้คงการตรวจสอบปลายทางตามปกติ
โปรแกรมสั้นนี้คืนทรัพยากรของออบเจ็กต์เมื่อออก สำหรับการเรียกบริการซ้ำ ให้ทำตามคำแนะนำอายุการใช้งานไคลเอนต์ของ .NET และเก็บไคลเอนต์/handler ไว้ตามภาระงาน แทนสร้าง connection pool ใหม่ทุกคำขอ ตรวจสถานะที่คืนมาด้วย เส้นทางพร็อกซีที่ทำงานได้ยังส่งคำปฏิเสธจากเว็บไซต์มาได้