.NET HttpClient 中的 SOCKS 代理:受支持的 URI 方案
使用兼容的 .NET HTTP 处理程序所记载的 SOCKS 代理 URI 方案,而不是假定旧有的第三方做法仍然必要。
旧答案建议额外使用 SOCKS 处理程序,是因为它们针对的是较旧的 .NET 网络栈。现代的受支持 .NET HTTP 栈可以使用已记载的 SOCKS 代理 URI 方案。
var handler = new HttpClientHandler
{
Proxy = new WebProxy("socks5://203.0.113.10:1080"),
UseProxy = true
};
using var client = new HttpClient(handler);该端点仅作示例。SOCKS5 代理列表为此 socks5 WebProxy URI 提供公开候选;请使用实际处理程序所支持的版本。在把此示例应用到较旧的 .NET Framework 进程之前,请检查目标框架、运行时、平台以及应用程序实际使用的处理程序。
Microsoft 当前的代理文档列出了 socks4、socks4a 和 socks5。这些名称描述的是协议行为。仅凭端口号并不能选择 SOCKS 版本,curl 的 socks5h 写法也不是所有客户端都接受的通用 URI 方案。
对于需要身份验证的 SOCKS5 服务,请按处理程序所支持的接口配置凭据。SOCKS4 和 SOCKS4a 并不提供相同的密码身份验证机制。
目标 URL 保持不变。HTTPS 请求仍会通过代理路径建立并验证目标的 TLS;添加 SOCKS 并不是停用该验证的理由。