Trying to login to a website clicking a button

I’ve just started playing around with C# few weeks ago. i got a task i am trying to perform and not sure if the way i do it now is the right approach.

I am trying to login to a website(in my case WordPress website- for lake of better options) and navigating in admin panel using C#

Read More

So far what I’ve done was creating a new project – Windows Form Application.

The following code – send a request to the website with password/username and other parameters as POST

private void button2_Click(object sender, EventArgs e)
{
    CookieContainer cookieJar = new CookieContainer();
    CookieContainer cookieJar2 = new CookieContainer(); // will use this later
    string testaa = ""; // will use this later
    string paramaters = "log=xxxx&pwd=xxxx&testcookie=1&redirect_to=http://www.example.com/wp-admin/&wp-submit=Log In";
    string strResponse;
    HttpWebRequest requestLogin = (HttpWebRequest)WebRequest.Create("http://www.lyndatobin-howes.com/wp-login.php");
    requestLogin.Method = "POST";
    requestLogin.AllowAutoRedirect = false;
    requestLogin.ContentType = "application/x-www-form-urlencoded";
    requestLogin.CookieContainer = cookieJar;
    requestLogin.ContentLength = paramaters.Length;
    StreamWriter stOut = new StreamWriter(requestLogin.GetRequestStream(), Encoding.ASCII);
    stOut.Write(paramaters);
    stOut.Close();
}

I then have this code to to take the cookie of the response.

HttpWebResponse response = (HttpWebResponse)requestLogin.GetResponse();
foreach (Cookie c in response.Cookies)
{
    cookieJar2.Add(new Cookie(c.Name, c.Value, c.Path, c.Domain));
}

then i have this to read the response + close some streams.

StreamReader stIn = new StreamReader(requestLogin.GetResponse().GetResponseStream());
strResponse = stIn.ReadToEnd();
string responseFromServer = stIn.ReadToEnd();
webBrowser1.DocumentText = responseFromServer;
stIn.Close();
response.Close();

And then i try using the above cookie for the page i am trying to access as follows :

HttpWebRequest requestLogin2 = (HttpWebRequest)WebRequest.Create("http://www.example.com/wp-admin/");
requestLogin2.Method = "POST";
requestLogin2.AllowAutoRedirect = false;
requestLogin2.ContentType = "application/x-www-form-urlencoded";
requestLogin2.CookieContainer = cookieJar2;
requestLogin2.ContentLength = paramaters.Length;
StreamWriter stOut2 = new StreamWriter(requestLogin2.GetRequestStream(), System.Text.Encoding.ASCII);
stOut2.Write(paramaters);
stOut2.Close();

StreamReader stIn2 = new StreamReader(requestLogin2.GetResponse().GetResponseStream());
strResponse = stIn2.ReadToEnd();
string responseFromServer2 = stIn2.ReadToEnd();
webBrowser1.DocumentText = responseFromServer2;
richTextBox2.Text += "nnn" + responseFromServer2;
stIn.Close(); 

Well it doesn’t work for some reason I’ve been trying this for a week now.

I tried displaying the header – after the first request to see what headers i get back. and then looked at the cookie i built (cookieJar2) and it seem they aren’t the same..

Anyways any help on the matter would be awesome and highly appreciated. i tried to give as much details as i could.

Related posts

Leave a Reply

1 comment

  1. The first thing I notice about your code is that you call GetResponse() twice in your initial login:

    HttpWebResponse response = (HttpWebResponse)requestLogin.GetResponse();
    

    and

    StreamReader stIn = new StreamReader(requestLogin.GetResponse().GetResponseStream());
    

    As a result, you’re making the login request twice and will be getting back two different cookies. This will be why the cookie in cookieJar2 doesn’t match what you’re outputting later. Reuse your response object:

    StreamReader stIn = new StreamReader(response.GetResponseStream());
    

    Next, when you try to load the admin page, don’t POST to it. Your second request should be a GET to retrieve the content of the page.