Windows设置代理后,如何使用WebClient绕过系统代理进行上传下载
嘿,我来帮你搞定这个问题!当Windows系统已经全局启用代理,但你想让WebClient在上传/下载时绕过它直接访问目标站点,分不同的.NET环境有几种实用方案:
针对.NET Framework的解决方案
方法1:完全绕过所有代理
WebClient默认会继承系统的代理设置,你只需要把它的Proxy属性设为null,或者用兼容性更好的空代理对象,就能直接建立连接:
using System.Net; var webClient = new WebClient(); // 直接禁用代理,最简单的写法 webClient.Proxy = null; // 如果你需要兼容更老的.NET版本,也可以用这个: // webClient.Proxy = GlobalProxySelection.GetEmptyWebProxy(); // 接下来执行你的上传/下载操作 string downloadedContent = webClient.DownloadString("https://你的目标站点地址");
方法2:仅针对特定域名绕过代理
如果只是想让某些特定域名不走代理,其他地址仍然使用系统代理,可以配置WebProxy的绕过列表:
using System.Net; // 创建代理对象,保留系统代理地址 var proxy = new WebProxy(WebRequest.DefaultWebProxy.Address); // 添加需要绕过的域名,支持通配符(比如*.example.com匹配所有子域名) proxy.BypassList = new string[] { "*.example.com", "192.168.1.100" }; var webClient = new WebClient(); webClient.Proxy = proxy; // 此时访问example.com会绕过代理,其他地址正常走系统代理 webClient.UploadFile("https://example.com/upload", "你的文件路径");
针对.NET Core/.NET 5+的解决方案
在现代.NET环境中,GlobalProxySelection已经被移除了,直接用下面的方式即可:
方法1:禁用WebClient的代理
和.NET Framework类似,直接把Proxy设为null就可以绕过系统代理:
using System.Net; var webClient = new WebClient(); webClient.Proxy = null; // 执行下载或上传操作 byte[] fileData = webClient.DownloadData("https://你的目标站点地址");
方法2:改用HttpClient(推荐)
虽然你问的是WebClient,但在现代.NET开发中,HttpClient是官方更推荐的HTTP客户端,性能和灵活性都更好,绕过代理的方式也很直观:
using System.Net; using System.Net.Http; // 创建一个不使用代理的处理器 var handler = new HttpClientHandler { UseProxy = false, // 如果需要针对特定域名绕过,也可以这么配置: // Proxy = new WebProxy { BypassList = new string[] { "*.example.com" } } }; using var httpClient = new HttpClient(handler); // 异步下载内容(也支持同步操作,不过异步更推荐) string response = await httpClient.GetStringAsync("https://你的目标站点地址");
额外注意事项
- 如果是在企业环境下,可能存在组策略强制代理的情况,这时候上述方法可能失效,需要联系IT部门调整相关策略。
- 确保你的代码有足够的权限修改网络设置(一般普通用户权限就足够,但某些受限环境可能需要管理员权限)。
内容的提问来源于stack exchange,提问作者Hassan Javed
相关产品推荐
相关产品推荐

