Answers:
这很容易以编程方式在您的代码中或以声明性方式在web.config或app.config中实现。
您可以通过编程方式创建代理,如下所示:
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元素的某些其他属性,因此请参考文档。
BypassProxyOnLocal
立即将属性设置为True(如果需要)。
如果您使用WebClient
,它具有可以使用的Proxy属性。
正如其他人提到的,有几种方法可以自动执行代理设置检测/使用
Web.Config:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="true" bypassonlocal="true" />
</defaultProxy>
</system.net>
如本文所述使用WebProxy类。
您也可以直接配置代理设置(配置或代码),然后您的应用将使用这些设置。
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身份验证的Internet Acceleration Server。给它发丝。
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);
}
}
WebProxy.GetDefaultProxy
从Framework 4.5开始已过时,并且此方法返回null。使用前最好考虑一下CredentialCache.DefaultNetworkCredentials
。如果您已将某些内容放入CredentialCache中,并且您的代理需要此类凭据,则它应该可以工作。否则将无济于事。
如果您希望应用程序使用系统默认代理,请将其添加到Application.exe.config(其中application.exe是应用程序的名称):
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="true" bypassonlocal="true" />
</defaultProxy>
</system.net>
在System.Net上的MSDN文章中可以找到更多详细信息。
这种单线适用于我:
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
CredentialCache.DefaultNetWorkCredentials
是在Internet Explorer中设置的代理设置。
WebRequest.DefaultWebProxy.Credentials
用于应用程序中的所有Internet连接。
自动代理检测是系统识别Web代理服务器并用于代表客户端发送请求的过程。此功能也称为Web代理自动发现(WPAD)。启用自动代理检测后,系统将尝试找到一个代理配置脚本,该脚本负责返回可用于该请求的代理集。
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平台安装程序安装软件包时遇到代理问题
这也使用了一个配置文件,即WebPlatformInstaller.exe.config
我试过在编辑建议这个IIS论坛这是
<?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 Platform Installer中注册才能使用。