C#通过代理连接

我在办公室工作,要求通过特定的http代理进行所有连接。 我需要编写一个简单的应用程序来查询Web服务器的一些值 – 如果没有代理服务器,这很容易。 我如何使C#应用程序可以识别代理? 我怎样才能通过代理进行任何forms的连接?

这很容易以编程方式实现,在代码中,或者在web.config或app.config中以声明方式实现。

你可以通过编程方式创build一个如下的代理:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("[ultimate destination of your request]"); WebProxy myproxy = new WebProxy("[your proxy address]", [your proxy port number]); myproxy.BypassProxyOnLocal = false; request.Proxy = myproxy; request.Method = "GET"; HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 

您基本上将WebProxy对象分配给request对象的proxy属性。 此request将使用您定义的proxy

为了实现同样的事情,你可以做以下事情:

 <system.net> <defaultProxy> <proxy proxyaddress="http://[your proxy address and port number]" bypassonlocal="false" /> </defaultProxy> </system.net> 

在你的web.config或app.config。 这设置了所有http请求将使用的默认代理。 根据您需要达到的要求,您可能会或可能不需要defaultProxy / proxy元素的某些附加属性,因此请参阅相关文档。

如果您正在使用WebClient ,则它具有可以使用的Proxy属性。

正如其他人所说,有几种方法可以自动执行代理设置检测/使用

Web.Config中:

 <system.net> <defaultProxy enabled="true" useDefaultCredentials="true"> <proxy usesystemdefault="true" bypassonlocal="true" /> </defaultProxy> </system.net> 

如本文所述使用WebProxy类。


您也可以直接configuration代理设置(configuration或代码),然后您的应用程序将使用这些设置。

Web.Config中:

 <system.net> <defaultProxy> <proxy proxyaddress="http://[proxy address]:[proxy port]" bypassonlocal="false" /> </defaultProxy> </system.net> 

码:

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url"); WebProxy myproxy = new WebProxy("[proxy address]:[proxy port]", false); request.Proxy = myproxy; request.Method = "GET"; HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 

试试这个代码。 在发出任何http请求之前调用它。 代码将使用您的Internet Explorer设置中的代理 – 但是,使用proxy.Credentials = ....因为我的代理服务器是NTLM身份validation的Internet加速服务器。 给它一个高招。

 static void setProxy() { WebProxy proxy = (WebProxy)WebProxy.GetDefaultProxy(); if(proxy.Address != null) { proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; WebRequest.DefaultWebProxy = new System.Net.WebProxy(proxy.Address, proxy.BypassProxyOnLocal, proxy.BypassList, proxy.Credentials); } } 

如果您希望应用程序使用系统默认代理,请将其添加到您的Application.exe.config(其中application.exe是您的应用程序的名称):

 <system.net> <defaultProxy enabled="true" useDefaultCredentials="true"> <proxy usesystemdefault="true" bypassonlocal="true" /> </defaultProxy> </system.net> 

有关System.Net的MSDN文章,可以find更多详细信息

Foole的代码完全适合我,但在.NET 4.0中,不要忘记检查Proxy是否为NULL,这意味着没有configuration代理(公司环境之外)

所以这里的代码解决了我们的公司代理问题

 WebClient web = new WebClient(); if (web.Proxy != null) web.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; 

这段代码对我有效:

 WebClient wc = new WebClient(); wc.Proxy.Credentials = CredentialCache.DefaultCredentials; 

这一个class轮为我工作:

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;

CredentialCache.DefaultNetWorkCredentials是在Internet Explorer中设置的代理设置。

WebRequest.DefaultWebProxy.Credentials用于应用程序中的所有Internet连接。

自动代理检测是Web代理服务器由系统识别并用于代表客户端发送请求的过程。 此function也称为Web代理自动发现(WPAD)。 启用自动代理检测时,系统将尝试查找代理configuration脚本,该代理configuration脚本负责返回可用于请求的一组代理。

http://msdn.microsoft.com/en-us/library/fze2ytx2.aspx

  var getHtmlWeb = new HtmlWeb() { AutoDetectEncoding = false, OverrideEncoding = Encoding.GetEncoding("iso-8859-2") }; WebProxy myproxy = new WebProxy("127.0.0.1:8888", false); NetworkCredential cred = (NetworkCredential)CredentialCache.DefaultCredentials; var document = getHtmlWeb.Load("URL", "GET", myproxy, cred); 

我将用一个例子来添加上面的答案。

我在尝试通过Web Platform Installer安装软件包时遇到了代理问题

这也使用WebPlatformInstaller.exe.configconfiguration文件

我试过在这个IIS论坛的编辑build议是

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.net> <defaultProxy enabled="True" useDefaultCredentials="True"/> </system.net> </configuration> 

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.net> <defaultProxy> <proxy proxyaddress="http://yourproxy.company.com:80" usesystemdefault="True" autoDetect="False" /> </defaultProxy> </system.net> </configuration> 

这些都没有工作。

对我有效的是这个 –

 <system.net> <defaultProxy enabled="true" useDefaultCredentials="false"> <module type="WebPI.Net.AuthenticatedProxy, WebPI.Net, Version=1.0.0.0, Culture=neutral, PublicKeyToken=79a8d77199cbf3bc" /> </defaultProxy> </system.net> 

该模块需要注册Web平台安装程序才能使用它。