C#程序中设置全局代理(Global Proxy)

1. HttpWebRequest类的Proxy属性,只要设置了该属性就能够使用代理了,如下:

1             //设置代理
2         WebProxy WP = new WebProxy("41.76.44.76", 3128);
3             ICredentials jxCredt = new NetworkCredential("proxy_username", "proxy_password");
4             WP.Credentials = jxCredt;
5
6             HttpWebRequest webreq = HttpWebRequest.Create(uri);
7             webreq.Proxy = WP;//将代理赋值给HttpWebRequest的Proxy属性    

2.但是程序中的每一个HttpWebRequest都需要如此设置,是否存在更简便的方法,例如在某个地方设置了代理,则整个程序的所有请求都使用代理呢。

答案是:有这样的方法。

===================================

不过在此之前先来理解一下 C#的WebRequest类(即HtteWebRequest的父类)在发送前的一些处理:

新创建一个WebRequest实例时(通过Create方法),会自动初始化其Proxy属性,

而它还有一个DefaultWebProxy属性,当用户没有手动设置Proxy属性时,

则WebRequest会使用DefaultWebProxy作为其Proxy;

而DefaultWebProxy是读取项目的app.config文件来进行初始化;

当没有app.config文件,或者没有在app.config中配置Proxy时,

DefaultWebProxy就会去读取Internet Explorer (IE)的代理设置

============================================

提示:

怎么查看当前的请求Rquest是否使用了代理?

3.所以设置全局代理的方式有以下几种:

第一种:程序不做任何处理,仅设置IE的代理;

第二种:在程序的app.config文件进行相关的配置,官方文档,如:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3   <system.net>
 4     <defaultProxy>
 5       <proxy
 6         proxyaddress="http://192.168.1.10:3128"
 7       />
 8     </defaultProxy>
 9   </system.net>
10 </configuration>

使用app.config设置代理时,如果想在运行时修改代理,则需要编辑app.config文件,

可以参考:C#读写config配置文件

 第三种:在代码中为DefaultWebProxy重新赋值,如下:

1 WebProxy WP = new WebProxy("41.76.44.76", 3128);
2 ICredentials jxCredt = new NetworkCredential("proxy_username", "proxy_password");//如果有用户名和密码需要设置
3 WP.Credentials = jxCredt;
4
5 WebRequest.DefaultWebProxy = WP;

4.总结:

第一种直接在IE上设置的,更多适合平时测试,因为让用户去作这种设置很不理智;

第二种和第三种都相对简单,只要设置好,整个程序的所有WebRequest都会使用代理,但第二种还需要对app.config文件进行编辑,所以非硬性要求,建议使用第三种,设置DefaultWebProxy的方式;

假如不想使用代理,则将DefaultWebProxy设为null,这样即使IE或者app.config设置了代理也不会影响。

代理的优先顺序:手动设置WebRequest.Proxy属性 > DefaultWebProxy > app.config > IE的代理设置;

时间: 2024-10-14 00:58:59

C#程序中设置全局代理(Global Proxy)的相关文章

[Z] C#程序中设置全局代理(Global Proxy)

https://www.cnblogs.com/Javi/p/7274268.html 1. HttpWebRequest类的Proxy属性,只要设置了该属性就能够使用代理了,如下: 1             //设置代理 2         WebProxy WP = new WebProxy("41.76.44.76", 3128); 3             ICredentials jxCredt = new NetworkCredential("proxy_us

在.NET Core程序中设置全局异常处理

以前我们想设置全局异常处理只需要这样的代码: 1 AppDomain currentDomain = AppDomain.CurrentDomain; 2 currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyExceptionHandler); 但是在.NET Core中并没有AppDomain的相关实现,至少在.NET Core最新的发布版本里没有. 以前我和网友@SillyPGM的讨论,然后我们查看

Linux设置全局代理与yum代理

设置全局代理,方法如下: 修改 /etc/profile 文件,添加下面内容: http_proxy=http://username:[email protected]:8080/ ftp_proxy=http://username:[email protected]:8080/ export http_proxy export ftp_proxy 如果没有密码限制,则以上内容可以修改为以下内容: http_proxy=http://yourproxy:8080/ ftp_proxy=http:

Qt应用程序中设置字体

Qt应用程序中设置字体 应用程序中经常需要设置字体,例如office软件或者是其他的编辑器软件等等.这里主要涉及到如下几个概念:字体,字号以及风格(例如:粗体,斜体,下划线等等).Qt里面也有对应的类.接下来我们主要对这几个类进行详细的说明,最后举例说明它们的应用. 1.Qt中相关的类:QFontDatabase.QFont.QFontInfo和QFontMetrics.QFontMetricsF: (1)QFontDatabase QFontDatabase类提供了底层窗口系统所提供的系统可用

Java中的动态代理以及Proxy类的偷瞄

动态代理机制 所谓动态代理,即通过代理类Proxy的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(Runtime)实现动态关联. Java动态代理类位于Java.lang.reflect包下,主要涉及到两个类. (1)接口InvocationHandler:该接口中仅定义了一个方法. Object invoke(Object obj, Method method, Object[] args); 在实际使用时,第一个参数obj一般指代理类,method是被代理的方法,args为该方法

redsocks 设置全局代理

分享一下我的经验, http://lilydjwg.is-programmer.com/2014/2/7/linux-really-global-http-proxy.42701.html 1. 优点: 设置一次,全局代理.连虚拟机都不要设置代理. 2. 缺点: 会停止工作,我把它放到crontab里. 1. 编译redsocks https://github.com/darkk/redsocks. 2. proxy.sh iptables -t nat -N REDSOCKS || true

python 程序中设置环境变量

python 中调用系统命令有三种方法: 1.os.system('command') ,这个方法是直接调用标准C的system() 函数,仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息. 2.os.popen('command'),该方法不但执行命令还返回执行后的信息对象,是通过一个管道文件将结果返回,例如可以设置一个变量,返回结果. 1 cha = os.popen('ls /').readlines 3.模块subprocess,实际使用过程中发现,假设要在代码当前进程中设置

VS2013中设置全局属性

为了更好的体现程序与库的独立性,vc++2013 中库路径设置不再采用全局设置,就是说在每个工程中都可以有自己独立的库路径设置,当然你如果不设置,那默认就是vs2013自己的库路径.但是如果你需要用到第三方库,应该怎么设置呢? 很简单,新的设置点不再是工具--选项--工程和解决方案-VC++ 目录(已弃用):而是工程--属性--配置属性--VC++ 目录 (这样是属于局部设置). 也可以在项目--xxx属性--VC++ 目录中来设定 2.若常常使用VS来创建工程,那么每创建一个工程都要如上操作一

在Winform程序中设置管理员权限及为用户组添加写入权限

在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行程序具有管理员权限或者设置运行程序的目录具有写入的权限,如果是在操作系统里面,我们可以设置运行程序以管理员身份运行,或者设置Users用户组在运行目录中具有写入权限都可以解决问题,不过如果我们想通过C#代码进行自动的处理,那么应该如何实现呢? 1.系统设置管理员权限或者目录写入权限 如果我们需要让程序以管理员身份运行,那么可以通过设置快捷方式的属性或者应用程序的属性为[以管理员身份运行此程序]即可实现,如