让 .NET HttpClient 请求经过代理
在 HttpClientHandler 上配置 WebProxy,避免未启用代理路由或把设置用在错误的客户端上。
请求必须使用由代理 handler 构建的 HttpClient。另建一个无关的 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 可以避免依赖进程或操作系统的自动发现。
代理运营方提供账户时,将一个 NetworkCredential 赋给 WebProxy.Credentials 属性。网站 Authorization 用于另一跳,公共 IP:port 条目并不附带默认登录信息。http:// 监听端可以通过隧道承载 HTTPS;应保留正常的目标验证。
这个短程序在退出时释放对象。对于服务中的反复调用,请遵循 .NET 客户端生命周期指导,按工作负载保留 client/handler,避免每次请求重建连接池。还要检查返回状态:代理路线正常,也仍然可能传回网站的拒绝响应。