error (407) "Proxy Authentication Required."

21,334

Solution 1

WebProxy proxy = new WebProxy(proxyAddress);
proxy.Credentials = new NetworkCredential("username", "password", "domain");
proxy.UseDefaultCredentials = true;
WebRequest.DefaultWebProxy = proxy;

HttpWebRequest request = new HttpWebRequest();
request.Proxy = proxy;

Or you could use WebClient.

WebClient client = new WebClient();
client.Proxy = proxy;
string downloadString = client.DownloadString("http://www.google.com");

Solution 2

For me it was as simple as telling it to use the DefaultCredentials (though I still haven't figured out why it can't use these by default):

request.Proxy.Credentials = (System.Net.NetworkCredential)System.Net.CredentialCache.DefaultCredentials;

Solution 3

You might want to look at System.Net.HttpWebRequest.Proxy on MSDN.
This gives details of how to set proxy authentication.

There is also a working code sample on this SO answer: https://stackoverflow.com/a/9603791/204690

For example:

// Create a new request to the mentioned URL.               
HttpWebRequest myWebRequest= (HttpWebRequest)WebRequest.Create("http://www.microsoft.com");

// Obtain the 'Proxy' of the  Default browser.  
IWebProxy proxy = myWebRequest.Proxy;

if (proxy != null)
{
    // Create a NetworkCredential object and associate it with the  
    // Proxy property of request object.
    proxy.Credentials=new NetworkCredential(username,password);
    // or 
    proxy.UseDefaultCredentials = true; 

    // try forcing the proxy to use http (just to the proxy not from proxy to server)
    UriBuilder proxyAddress = new UriBuilder(proxy.Address);
    proxyAddress.Scheme = "http";

    myWebRequest.Proxy=proxy;
}
HttpWebResponse myWebResponse=(HttpWebResponse)myWebRequest.GetResponse();
Share:
21,334
Tim
Author by

Tim

I am a .Net Developer.

Updated on May 18, 2020

Comments

  • Tim
    Tim almost 4 years

    I have a requirement like...i want to access an url (login page which is web) from a winforms. i have to pass the credentials to that url and the response should be the contect of the authenticated web page(markup).

    I have written a function which will request the url and return the response. but i am getting error code (407)

    "Proxy Authentication Required."

    Here is my code.

    private static void GetPageContent(){
        string url = "https://LoginPage.aspx/";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "GET";
        // If required by the server, set the credentials.
        //request.Proxy.Credentials = CredentialCache.DefaultCredentials;
        request.Credentials = new NetworkCredential("user1", "testuser#");
        // Get the response.
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        // Display the status.
        Console.WriteLine(response.StatusDescription);
        // Get the stream containing content returned by the server.
        Stream dataStream = response.GetResponseStream();
        // Open the stream using a StreamReader for easy access.
        StreamReader reader = new StreamReader(dataStream);
        // Read the content.
        string responseFromServer = reader.ReadToEnd();
        // Display the content.
        Console.WriteLine(responseFromServer);
        // Cleanup the streams and the response.
        reader.Close();
        dataStream.Close();
        response.Close();
    }