How do I determine (elegantly) if proxy authentication is required in C# winforms app

后端 未结 5 1514
时光取名叫无心
时光取名叫无心 2020-12-28 08:49

My use case is this, I want to call out to a webservice and if I am behind a proxy server that requires authentication I want to just use the default credentials...

相关标签:
5条回答
  • 2020-12-28 09:37

    It was only after I had first deployed my app that I realised some users were behind firewalls... off to work to test it. Rather than do a test for a '407 authentication required' I just do the same Proxy setup whether it might be needed or not...

    System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri.AbsoluteUri);
    //HACK: add proxy
    IWebProxy proxy = WebRequest.GetSystemWebProxy();
    proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
    req.Proxy = proxy;
    req.PreAuthenticate = true;
    //HACK: end add proxy
    req.AllowAutoRedirect = true;
    req.MaximumAutomaticRedirections = 3;
    req.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1; DeepZoomPublisher.com)";
    req.KeepAlive = true;
    req.Timeout = 3 * 1000; // 3 seconds
    

    I'm not sure what the relative advantages/disadvantages are (try{}catch{} without proxy first, versus just using the above), but this code now seems to work for me both at work (authenticating proxy) and at home (none).

    0 讨论(0)
  • 2020-12-28 09:40

    Actually, seems that this isn't an issue after all, Previously I was setting the auth like so...

      WebProxy proxy = new WebProxy(@"http://<myProxyAddress>:8080");
      proxy.Credentials = new NetworkCredential(<myUSerName>, <myPassword>, <myDomain>);
      WebRequest.DefaultWebProxy = proxy;
    

    This would be fine for when I was behind the proxy but throw an error when there was no proxy, so of course I expected the same error above as I was still just setting the same credentials, but you know what they say about assuming things....in fact there is no error at all with setting the default creds, all is sweet.

    0 讨论(0)
  • 2020-12-28 09:41

    It looks like if you leave the Proxy stuff alone, .NET should just use the IE proxy settings, which seems like the most "correct" way of dealing with proxies...

    0 讨论(0)
  • 2020-12-28 09:42

    If you want to check for the Proxy settings in IE, you could also peek into the registry: check the HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings branch of the registry tree - lots of options and settings there. Most notably: ProxyEnable (a DWORD, 0 = no proxy, 1 = proxy enabled).

    0 讨论(0)
  • 2020-12-28 09:51

    System.Net.WebProxy has a property called UseDefaultCredentials that may be what you want (but I have to admit a bit of ignorance here). The link to the relevant documentation is here.

    0 讨论(0)
提交回复
热议问题