因为涉及到代理的各种情况,WebRequest和WebProxy类的文档写的相当复杂,不但各个文档关注点不同,而且不同版本的同一文档也有小小的区 别,网上也没有关于这个类的相关文章。于是乎这篇Blog是我钻研半天MSDN很久后总结并且花了一小时憋出来的,希望下面的内容能帮到大家。
(AcDown中也使用了相关的代码,有兴趣的可以找来看看

直接进入正题,对于需要使用WebProxy类的情况,大致分如下几种:
1、创建WebRequest的时候,没有刻意设置代理(默认情况)
2、使用Internet Explorer代理
3、使用应用程序配置文件中的代理
4、不使用代理
5、使用.NET框架默认设置的代理
6、使用WPAD配置脚本自动设置的代理
7、使用IE+应用程序配置文件的混合代理
8、使用IE代理但禁用自动代理检测(WPAD)

怎么样,很混乱吧。当然上面这些很多都是重复的,不过基本已经涵盖了所有可能遇到的情况,下面让我来一个一个说说:

1、默认情况下的代理设置
当创建一个新的HTTP请求时(WebRequest.Create方法),得到的HttpWebRequest类会自动初始化它的Proxy属性,那么这个属性的默认值是什么呢?MSDN中说:

 如果配置文件中未指定代理并且未指定 Proxy 属性,则 HttpWebRequest 类使用从本地计算机上的 Internet Explorer 中继承的代理设置。 如果 Internet Explorer 中没有代理设置,请求会直接发送到服务器。 

这段话中,说到Proxy属性使用的其实就是默认代理,这个默认代理默认来自于IE,如果IE没有设置代理,那么就会直接连接到目标服务器。为什么要说“默认代理默认来自于IE”呢?因为这个“默认来自于IE”也是可以修改的,通过修改WebProxy.DefaultWebProxy属性,你可以控制每次新建请求时所使用的默认代理:

DefaultWebProxy 属性从 app.config 文件中读取代理服务器设置。 如果没有配置文件,则使用当前用户的 Internet Explorer (IE) 代理设置。

如果 DefaultWebProxy 属性设置为 null,则使用 Create 或 CreateDefault 方法创建的 WebRequest 类的所有后续实例都没有代理。

这里需要注意的是,如果DefaultWebProxy设置为null,并不意味着WebRequest的Proxy属性也是null,这两个null表示的意义不同。

2、使用IE代理,但不使用任何动态设置
最简单的方法是将Proxy属性设置为WebProxy.GetDefaultProxy,GetDefaultProxy会读取当前计算机上的IE代理设置,同时忽略掉所有动态设置的内容:

GetDefaultProxy 方法读取 Internet Explorer 5.5 和更高版本存储的非动态代理设置并使用这些设置创建 WebProxy 实例。

GetDefaultProxy 方法不获取从 Internet Explorer 运行的脚本、从自动配置项或者从 DHCP 或 DNS 查找生成的任何动态设置。

但是这个API已经过时,所以现在我推荐的方法是:将Proxy属性设置为null:
http://msdn.microsoft.com/zh-cn/library/fze2ytx2(v=vs.80).aspx

3、使用IE代理,同时使用各种动态配置项
这个是比较简单的了,当然这种情况还是会包含两种小的情况:
(1)使用app.config中的配置:将Proxy属性设置为 WebProxy.DefaultWebProxy


(2)不使用app.config中的配置:将Proxy属性设置为 WebRequest.GetSystemWebProxy()
GetSystemWebProxy 方法读取当前用户的 Internet Explorer (IE) 代理设置。 此进程包括 IE 选项来自动检测代理设置,请使用自动配置脚本、手动代理服务器设置和高级手动代理服务器设置。 

4、不使用任何代理
不使用任何代理的方法是:创建一个WebProxy类的新实例:

默认构造函数通过将 Address 属性设置为 null 来初始化 WebProxy 类的空实例。

Address 属性为 null 时,IsBypassed 方法返回 true,且 GetProxy 方法返回目标地址。

另外再来看看Address属性的说明:

Address 属性包含代理服务器的地址。 如果未启用自动代理检测并且未指定自动配置脚本,则 Address 属性与 BypassList 共同确定用于请求的代理。

当 Address 属性为 null 时,请求回避此代理并且直接连接到目标主机。

综上所述,也就是说,当使用无参构造函数创建一个新的WebProxy对象时(req.Proxy = new WebProxy();),这个请求会绕过所有代理服务器直接连接目标服务器。

5、其他
关于如何设置app.config/machine.config配置文件中的代理设置:
<defaultProxy>元素:http://msdn.microsoft.com/zh-cn/library/kd3cf2ex
<proxy>元素:http://msdn.microsoft.com/zh-cn/library/sa91de1e(v=vs.100).aspx

Over~

转载于:https://www.cnblogs.com/ahua1188/p/4838419.html

关于.Net WebProxy【转】相关推荐

  1. C# WebProxy POST 或者 GET

    代理服务器无账号和密码的代理服务器: //创建请求HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//实例化一个WebP ...

  2. C# .net core 使用自定义的WebProxy

    为什么80%的码农都做不了架构师?>>>    因为.net core 的System.Net 中没有提供WebProxy这个方法,所以可以根据需求实现一个. public clas ...

  3. YARN-2.7.3-源码分析系列2:启动脚本原理的分析

    2019独角兽企业重金招聘Python工程师标准>>> 上一节,我们把二进制和源码都下载好了,这一把,我们来启动脚本的研究,看看究竟是如何把RM和NM启动起来的! --------- ...

  4. ISA SERVER日志存放SQL SERVER中

    在默认安装ISA 2004或是2006后,将会自动安装简易版的SQL SERVER来存放防火墙与WEBPROXY的连接访问日志,可是由于MSDE仅限于单机连接的使用,并且在访问上也有容量大小的限制.因 ...

  5. 【实习记】2014-08-20实习的mini项目总结

    实习项目总结文档 项目介绍 项目逻辑很简单,只有几个页面,只能登录,查看,支付和退款.主要作用是熟悉C++的cgi的web服务开发方式. 项目页面截图 图一:登录页面 图二:买家查看 图三:买家支付 ...

  6. .net采集网页方法大全(5种)

    /// <summary>方法一:比较推荐/// 用HttpWebRequest取得网页源码/// 对于带BOM的网页很有效,不管是什么编码都能正确识别/// </summary&g ...

  7. HtmlAgilityPack 总结(一)

    一个解析html的C#类库HtmlAgilityPack, HtmlAgilityPack是一个基于.Net的.第三方免费开源的微型类库,主要用于在服务器端解析html文档(在B/S结构的程序中客户端 ...

  8. hadoop2 作业执行过程之作业提交

    hadoop2.2.0.centos6.5 hadoop任务的提交常用的两种,一种是测试常用的IDE远程提交,另一种就是生产上用的客户端命令行提交 通用的任务程序提交步骤为: 1.将程序打成jar包: ...

  9. Http访问代理使用

    1.GlobalProxySelection 类 包含所有 HTTP 请求的全局默认代理实例. 2.代码示例 if(Setting.NeedProxy)    {     GlobalProxySel ...

  10. C#网页自动登录和提交POST信息的多种方法

    网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多,常用的用WebBrowser.WebClient.HttpWebRequest这三 ...

最新文章

  1. 实例浅析epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO
  2. Some best freeware
  3. Java 设计模式之外观模式
  4. Home-brew 安装卸载 Git
  5. PHP域名查墙代码,怎么查看域名是否被墙检测(教你一招域名被墙解决办法)
  6. 请给出linux中查看系统已经登录用户的命令?
  7. office2013 应用程序无法正常启动(0xc000007b)
  8. APP推广的八大“邪恶”方法?做好产品才是王道!
  9. MLP手写数字识别实现
  10. 最新傻妞搭建方法以及常见问题2022年9月25
  11. 求最小公倍数的三种方法
  12. winform 窗体的单例模式
  13. 腾讯和360之争之二
  14. train_transformer.py 异常:Assertion `srcIndex < srcSelectDimSize` failed.
  15. android+手机运行卡,手机运行卡顿,运行内存太小,在购买的时候就需要注意运行速度...
  16. 自媒体人想要写好实时热点文章,一定要掌握好这三点
  17. 手机学python_手机学python的app
  18. JDK8新特性(4)—— stream 流
  19. 计算机pscs6教程,photoshop CS6零基础入门教程
  20. microbit python中文_microbit之mpython的API

热门文章

  1. 浅谈JAVA项目开发
  2. java语言飞机大战代码_飞机大战JAVA代码
  3. HP laserjet 1022n打印机总出现前端盖打开或者缺少硒鼓对话框,无法打印?
  4. 5. DICOM图像层级分类-DCMTK-压缩图像PixelData读取
  5. 代码整洁之道-程序员的职业素养
  6. iOS 游戏开发教程资源
  7. hping 详解_hping3命令
  8. 开发信模板之失联跟进样品篇
  9. QT中关于书签的操作
  10. 什么是NAS.什么是黑白群晖?(转)