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

后端 未结 5 1525
时光取名叫无心
时光取名叫无心 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条回答
  •  -上瘾入骨i
    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).

提交回复
热议问题