views:

3751

answers:

5

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...

  WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;

Otherwise I'll just simply make the call, It would be very nice to determine if the auth is required up front, rather than handle the exception after I attempt to make the call.

Ideas?

+1  A: 

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.

Sean Bright
I think that this would probably work as well, in fact is basically the same thing as the above. Thanks.
Tim Jarvis
+3  A: 

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).

CraigD
A: 

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...

Orion Edwards
no you can't just ignore it, that definitly causes an exception.
Tim Jarvis
I've just tried this and found no problems. I think this is a valid approach.
Nick R
A: 

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).

Cheers, Marc

marc_s
A: 

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.

Tim Jarvis