简体   繁体   English

如何在 .net HttpWebRequest 中自动检测/使用 IE 代理设置

[英]How to AutoDetect/Use IE proxy settings in .net HttpWebRequest

Is it possible to detect/reuse those settings ?是否可以检测/重用这些设置?

How ?如何 ?

The exception i'm getting is This is the exception while connecting to http://www.google.com我得到的例外是这是连接到http://www.google.com 时的例外

System.Net.WebException: Unable to connect to the remote server --->
  System.Net.Sockets.SocketException: A connection attempt failed because the
  connected party did not properly respond after a period of time, or established
  connection failed because connected host has failed to respond 66.102.1.99:80

  at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, 
     SocketAddress socketAddress)
  at System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
  at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,
     Socket s4, Socket s6, Socket& socket, IPAddress& address,
     ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout,
     Exception& exception)
  --- End of inner exception stack trace ---
  at System.Net.HttpWebRequest.GetResponse()
  at mvcTest.MvcApplication.Application_Start() in
     C:\\home\\test\\Application1\\Application1\\Program.cs:line 33"

HttpWebRequest will actually use the IE proxy settings by default.默认情况下,HttpWebRequest 将实际使用 IE 代理设置。

If you don't want to use them, you have to specifically override the .Proxy proprty to either null (no proxy), or the proxy settings of you choice.如果你不想使用它们,你必须明确覆盖.Proxy proprty为null(无代理),或者你选择的代理设置。

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://news.bbc.co.uk");
 //request.Proxy = null; // uncomment this to bypass the default (IE) proxy settings
 HttpWebResponse response = (HttpWebResponse)request.GetResponse();

 Console.WriteLine("Done - press return");
 Console.ReadLine();

I was getting a very similar situation where the HttpWebRequest wasn't picking up the correct proxy details by default and setting the UseDefaultCredentials didn't work either.我遇到了一个非常相似的情况,默认情况下 HttpWebRequest 没有选择正确的代理详细信息,并且设置 UseDefaultCredentials 也不起作用。 Forcing the settings in code however worked a treat:然而,在代码中强制设置是一种享受:

IWebProxy proxy = myWebRequest.Proxy;
if (proxy != null) {
    string proxyuri = proxy.GetProxy(myWebRequest.RequestUri).ToString();
    myWebRequest.UseDefaultCredentials = true;
    myWebRequest.Proxy = new WebProxy(proxyuri, false);
    myWebRequest.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
}

and because this uses the default credentials it should not ask the user for their details.并且由于它使用默认凭据,因此不应询问用户的详细信息。

Note that this is a duplicate of my answer posted here for a very similar problem: Proxy Basic Authentication in C#: HTTP 407 error请注意,这是我在此处针对一个非常相似的问题发布的答案的副本: C# 中的代理基本身份验证:HTTP 407 错误

For people having problems with getting this to play nice with ISA server, you might try to set up proxy in the following manner:对于在使用 ISA 服务器时遇到问题的人,您可以尝试按以下方式设置代理:

IWebProxy webProxy = WebRequest.DefaultWebProxy;
webProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
myRequest.Proxy = webProxy;

如果未明确设置WebRequest.DefaultWebProxy (默认设置为WebRequest.DefaultWebProxy ),则默认情况下会发生这种情况。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM