Search code examples
c#proxyhttpwebrequestbasic-authenticationhttp-status-code-407

Proxy Basic Authentication in C#: HTTP 407 error


I am working with a proxy that requires authentication, i.e., in a browser if I try to open a page it will immediately ask for credentials. I supplied same credentials in my program but it fails with HTTP 407 error.

Here is my code:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);

IWebProxy proxy = WebRequest.GetSystemWebProxy();
CredentialCache cc = new CredentialCache();
NetworkCredential nc = new NetworkCredential();

nc.UserName = "userName";
nc.Password = "password";
nc.Domain = "mydomain";
cc.Add("http://20.154.23.100", 8888, "Basic", nc);
proxy.Credentials = cc;
//proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
request.Proxy = proxy;
request.Proxy.Credentials = cc;
request.Credentials = cc;
request.PreAuthenticate = true;

I have tried every possible thing but seem like I am missing something. Is it something like, I have to make two requests? First with out credentials and once I hear back from server about need for credentials, make same request with credentials?


Solution

  • here is the correct way of using proxy along with creds..

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
    
    IWebProxy proxy = request.Proxy;                    
    if (proxy != null)
    {
        Console.WriteLine("Proxy: {0}", proxy.GetProxy(request.RequestUri));
    }
    else
    {
        Console.WriteLine("Proxy is null; no proxy will be used");
    }
    
    WebProxy myProxy = new WebProxy();
    Uri newUri = new Uri("http://20.154.23.100:8888");
    // Associate the newUri object to 'myProxy' object so that new myProxy settings can be set.
    myProxy.Address = newUri;
    // Create a NetworkCredential object and associate it with the 
    // Proxy property of request object.
    myProxy.Credentials = new NetworkCredential("userName", "password");
    request.Proxy = myProxy;
    

    Thanks everyone for help... :)