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();
}
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");
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();
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;
You can check if you can connect to the proxy first. Here is an example:
System.Net.Sockets.Socket sock = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
sock.Connect(url, proxyPort);
if (sock.Connected == true) // Port is in use and connection is successful
{
sock.Close();
return true;
}
else
{
sock.Close();
}`enter code here`
return false;