.Net C# – Log in to Website Programmatically

22 Comments

In this tutorial, will show how to log into a website through code.  I am going to use Twitter in my example.

THIS IS FOR EDUCATIONAL PURPOSES ONLY.  I WOULD NOT ADVISE THE USE OF THIS TO ALWAYS LOG-IN TO TWITTER.

First, you will need to download and install Tamper Data.  It’s an add-on for Firefox that allows you to view and tamper with GET/POST web request data.  We won’t be doing any tampering.  We will be using it to view what POST parameters the page is expecting.

Next, navigate to the log in page for Twitter(http://twitter.com/login).  Once the page has loaded, go to Tools –> Tamper Data to open Tamper Data.  At the top of Tamper Data, click the Start Tamper button.  After clicking the button, click the “Sign In” button on Twitter’s log in page.  Once you hit the Sign In button, Tamper Data will prompt you with this popup….

Tamper Data Popup

Click “Tamper”.  You will then be presented with this window…

Tamper Data

If you notice on the right-hand side of the window, you will see the POST parameters.  These are:

authenticity_token
session[username_or_email]
session[password]
commit

Now that we have those, we can close the Tamper Data window, and close Firefox.

Now for the code.  The code is actually fairly simple.  We are just going to use the WebBrowser class to make the requests to the server to get the html source of the page.  This will give us the “authenticity_token” for us to use in the POST request.

string url = "https://twitter.com/login";
string username = "someUserName";
string password = "somePassword";
string commit = "Sign+In"; //this matches the data from Tamper Data

private void Login()
{
     WebBrowser b = new WebBrowser();
     b.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(b_DocumentCompleted);
     b.Navigate(url);
}

private void b_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
     WebBrowser b = sender as WebBrowser;
     string response = b.DocumentText;

     // looks in the page source to find the authenticity token.
     // could also use regular expressions here.
     int index = response.IndexOf("authenticity_token");
     int startIndex = index + 41;
     string authenticityToken = response.Substring(startIndex, 40);

     // unregisters the first event handler
     // adds a second event handler
     b.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(b_DocumentCompleted);
     b.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(b_DocumentCompleted2);

     // format our data that we are going to post to the server
     // this will include our post parameters.  They do not need to be in a specific
     //    order, as long as they are concatenated together using an ampersand ( & )
     string postData = string.Format("authenticity_token={2}&session[username_or_email]={0}&session[password]={1}&commit={3}", username, password, authenticityToken, commit);

     ASCIIEncoding enc = new ASCIIEncoding();

     //  we are encoding the postData to a byte array
     b.Navigate("https://twitter.com/sessions", "", enc.GetBytes(postData), "Content-Type: application/x-www-form-urlencoded\r\n");
}

private void b_DocumentCompleted2(object sender, WebBrowserDocumentCompletedEventArgs e)
{
     WebBrowser b = sender as WebBrowser;
     string response = b.DocumentText;

     if (response.Contains("Sign out"))
     {
         MessageBox.Show("Login Successful");
     }
}

And that’s all you need to do.  You can now use the response variable to see the tweets that are in your timeline.

Tags: , , , ,

22 Responses to “C# – Log in to Website Programmatically”

  1. Gaurav Says:

    hi

    is there any way to login to another website like orkut facebook etc..
    any standard or general way ??

    plzz help

  2. Ryan Alford Says:

    since all sites use different post data, there is no general way. it has to be custom for the site that you want to login to.

  3. Mike Newman Says:

    Is there a way to do this using http request in C#?
    simply using NetworkCredential(UserName, UserPwd)); does not work for me.
    Is it possible to use the webBrowser to login and then pass on the cookies and stuff to httprequest so a login isnt necessary?

  4. Dorin Cucicov Says:

    hi, great tutorial, haven’t tried it yet, but still this is of great use. I’m trying to develop a mobile application for pixelpost, hope it works. Good luck !

  5. Ryan Alford Says:

    @Mike,

    I am not totally sure. What issues are you having? Are you behind a proxy?

  6. Lewi Says:

    Hi,

    Once I’ve logged in, how would I store the cookie received and navigate to other secure pages?

    And if not too much trouble, logout.

    Thnx

  7. Ryan Alford Says:

    @Lewi

    The WebBrowser control should be storing the cookie itself. So as long as you keep that same instance of the WebBrowser, you should be able to navigate to any other secured page.

  8. Brad Amodeo Says:

    I created both a console app and a web app in VS.NET 2008 and tried to compile it. I get the following error on the lines where b_DocumentCompleted and b_DocumentCompleted2 are declared:
    —————————————————
    The type or namespace name ‘WebBrowserDocumentCompletedEventArgs’ could not be found (are you missing a using directive or an assembly reference?)
    —————————————————
    I looked for a System.WebBrowser reference/class and couldn’t find it. Is that what I am missing? Any help is appreciated!

  9. Brad Amodeo Says:

    Oh–it needs to be a Windows Forms application. I get it now!

  10. workouts for elliptical Says:

    Nice post . Thanks for, writing on this blog page mate. I shall email you again. I didn’t realise that!

  11. Fred Says:

    Thanks for this nice pice of code Ryan. What assebleys are you using/declaring for this? Does System.WebBrowser suffice?

  12. Ollie Pratt Says:

    This site called Unblock Websites also has some decent information on the subject.

  13. Balan Sinniah Says:

    THanks for the good post. However I am hitting road block login into this page.

    http://d01.megashares.com/myms_login.php

    Are you able to help me in getting the POST parameters?

    I am not getting any errors but it’s just that the response string is not telling me anything even if I supply the wrong password and username. It;s just giving me a blank login screen.

    I would appreciate your help.

    Thanks

  14. Janeth Knippel Says:

    Wow, this post is really something, it makes me shiver, I think because of the topic

  15. Tim Fonteneau Says:

    Generating free instant traffic to a blog is a critical element for the … by creating unique articles with keywords related to your site’s niche. Get free instant traffic to blog sites.

  16. Winfred Quist Says:

    hello this was exactly the details I used to be seeking, does one brain basically discuss this using my viewers ?

  17. Protect Your Privacy! Use our free proxy to safeguard your online identity! Says:

    We’re a gaggle of volunteers and starting a new scheme in our community. Your site offered us with useful info to paintings on. You have performed a formidable task and our entire neighborhood will probably be grateful to you.

  18. Programi za rezanje Says:

    We promote through various social media, including Facebook, Twitter, LinkedIn, and in the near future we will have a YouTube channel. In addition, we promote it off-line by word of mouth, business cards, and any other printed materials sent out to clients or potential clients.

  19. Carol Bonomi Says:

    Good job!! You really cleared out the last part of your post, wherein it is unclear and confusing

  20. brindes design Says:

    Excellent post. I was checking constantly this blog and I am impressed! Very helpful information specially the last part :) I care for such information a lot. I was looking for this particular information for a very long time. Thank you and best of luck.

  21. Meryl Nichell Says:

    Useful info is discussed and I am very thankful for the tips, excellent work you have there

  22. Elbert Cesa Says:

    Sorry, but I dispute with this unique upload. I do get pleasure from your personal page however and will likely continue to keep moving once more for posts.

Leave a Reply