如何在C#的HttpClient中配置使用Socks4/Socks5代理?
.NET 中 HttpClient 配置 Socks4/Socks5 代理方案
方案1:.NET 6+ 原生支持(无第三方依赖)
.NET 6 及以上版本的 WebProxy 已经原生支持 Socks4、Socks4a、Socks5 协议,仅需给代理地址增加对应协议前缀即可实现配置,示例代码如下:
// Socks5代理配置,需使用socks5://前缀,Socks4则替换为socks4:// string proxyAddress = "socks5://你的代理IP:代理端口"; var handler = new HttpClientHandler { UseProxy = true, UseDefaultCredentials = false, UseCookies = true, AllowAutoRedirect = false, Proxy = new WebProxy(proxyAddress) }; // 若代理需要账号密码认证,按如下方式配置Proxy即可 // Proxy = new WebProxy(proxyAddress) // { // Credentials = new NetworkCredential("代理用户名", "代理密码") // } var client = new HttpClient(handler);
方案2:.NET 5及更早版本 / .NET Framework 适配方案
低版本.NET 环境原生不支持Socks代理,需要引入第三方NuGet包 MihaZupan.HttpToSocks5Proxy 实现,配置代码如下:
string proxyIp = "你的代理IP"; int proxyPort = 代理端口; // 配置Socks5代理,不需要认证则删除最后两个参数 var proxy = new HttpToSocks5Proxy(proxyIp, proxyPort, "代理用户名(可选)", "代理密码(可选)"); // 配置Socks4代理写法 // var proxy = new HttpToSocks5Proxy(proxyIp, proxyPort, ProxyType.Socks4, "代理用户名", "代理密码"); var handler = new HttpClientHandler { UseProxy = true, UseDefaultCredentials = false, UseCookies = true, AllowAutoRedirect = false, Proxy = proxy }; var client = new HttpClient(handler);
注意事项
- 配置Socks代理时必须添加对应协议前缀,否则会被默认识别为HTTP代理
- 原生Socks代理支持仅在.NET 6及更高版本提供,低版本环境必须依赖第三方组件实现
内容的提问来源于stack exchange,提问作者RedOmega87
相关产品推荐
相关产品推荐

