Click here to Skip to main content
6,596,602 members and growing! (20,222 online)
Email Password   helpLost your password?
General Programming » Internet / Network » General     Intermediate

Blogging to LiveJournal.com Using C# Code

By Kelvin Tsang

This article shows you how to blog programmatically to LiveJournal.com using C#.
C#.NET 1.1, .NET 2.0, Win2K, WinXP, Win2003VS.NET2003, VS2005, Dev
Posted:20 Jan 2005
Views:50,211
Bookmarked:28 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
10 votes for this article.
Popularity: 4.23 Rating: 4.23 out of 5

1

2
1 vote, 10.0%
3
2 votes, 20.0%
4
7 votes, 70.0%
5

Introduction

Web-logging, also known as blogging, is a new technology that allows you to publish your ideas to the world quickly. This has been a trend for the last several months. This article will show you how to post blogs to LiveJournal.com programmatically using C#, so that you can implement the functionality in your own application.

You need some familiarization with C# in order to understand the code.

Background

LiveJournal.com is one of the most popular free blog hosts today. That's why I chose this as code sample, because more people can benefit from it. You can always get a free LiveJournal blog account here.

The code provided here allows you to blog programmatically. You can go straight to the code. However, I would also like to show you how it works behind the scene.

You are probably familiar with blogging. If you are not, let me take you through the process of blogging, step-by-step using your mouse and keyboard.

In general, these are the steps you need to do, to blog manually:

  • Go to the blog host's homepage.
  • Log-in using your username and password (i.e., "my_favorite_username" and "my_favorite_password").
  • Enter your blog's subject and your blog's body (i.e., "This is a title." and "This is a message body."), click Submit.
  • Check your blog (i.e., going to http://www.livejournal.com/users/your_favorite_username/).

The fact is, only 2nd and 3rd are necessary in the code. These are the two major steps, in which you have to send data to the blog host.

So, what's behind the scene?

Here are the steps performed by your browser, and the code I am going to provide does the following using C#:

  • Send a HttpWebRequest including username and password.
  • Receive a password validation response from the blog server.
  • If log-in is successful, store the response's cookies.
  • Send another HttpWebRequest including the previously stored cookies, a blog title and a message body.

Using the code

I will show you the most important section of the code. This block of code allows you to send your username and password to the blog server, i.e. the log-in process. After successfully logging-in, you may use similar code to send the blog title and the message body to the blog server. Comments have been added to the code:

public bool Login(string username, string password)
{
   try
   {
      // Prepare the HttpWebRequest to send data to 

      // LiveJournal.com

      string url = 
        string.Format("http://www.livejournal.com/login.bml");
      HttpWebRequest request = 
        (HttpWebRequest) WebRequest.Create(url);
      request.UserAgent = "Mozilla/5.0 (Windows; U; " 
         + "Windows NT 5.1; en-US; rv:1.7) "
         + "Gecko/20040707 Firefox/0.9.2";
      request.Method = "POST";
      request.Accept = 
        "text/xml,application/xml,application/xhtml+xml,"
        + "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
      request.KeepAlive = true;
      request.ContentType = @"application/x-www-form-urlencoded";
      request.Referer = 
       string.Format("http://www.livejournal.com/login.bml?nojs=1");
      request.CookieContainer = cookieContainer;

      // Send the log-in data

      string postData = 
        string.Format("response=&user={0}&"
           + "password={1}&expire=close&"
           + "bindip=no&action%3Alogin=Log+in...", username,"
           + " password); 
      request.Method="POST";
      byte [] postBuffer = 
        System.Text.Encoding.GetEncoding(1252).GetBytes(postData);
      request.ContentLength = postBuffer.Length;
      Stream postDataStream = request.GetRequestStream();
      postDataStream.Write(postBuffer,0,postBuffer.Length);
      postDataStream.Close();

      // Get the response

      HttpWebResponse response =
        (HttpWebResponse) request.GetResponse();
      response.Cookies =
        request.CookieContainer.GetCookies(request.RequestUri);

      // Add the cookie to this instance of object, 

      //so that the cookies can be reused for next request

      Cookies.Add(response.Cookies);

      // Read the response from the stream

      Encoding enc = System.Text.Encoding.UTF8;
      StreamReader responseStream = 
        new StreamReader(response.GetResponseStream(), enc, true);

      string responseHtml = responseStream.ReadToEnd();
      response.Close();
      responseStream.Close();

      // For debug purpose, print out the cookies received from 

      // LiveJournal.com

      foreach (Cookie c in response.Cookies)
      {
         Debug.WriteLine(string.Format("{0}: {1}", c.Name, c.Value));
      }

      // Check if log-in is successful

      string successString = 
         "you are now logged in to LiveJournal.com";
      if (responseHtml.IndexOf(successString) >= 0)
      {
         // log-in successfully

         return true;
      } 
      else
      {
         // log-in failed

         return false;
      }
   }
   catch (Exception)
   {
      return false;
   }
}

And here is the code, to call this function in my main application:

static void Main(string[] args)
{
   /* Put your configuration below */
   string username = "YOUR LIVEJOURNAL USERNAME";
   string password = "YOUR LIVEJOURNAL PASSWORD";
   string subject = "This is subject";
   string body = "This is a message body";
   /* End of configuration */

   // Create the LiveJournal object

   LiveJournal lj = new LiveJournal();

   // Log-in using your username and password

   if (lj.Login(username, password))    //  <--- calling the code above

   {
      // if log-in successfully, post the blog

      lj.AddBlog(subject, body);
      System.Console.WriteLine("Blog successfully!");
   } 
   else
   {
      System.Console.WriteLine("Blog failed");
   }
   System.Console.WriteLine("Press any key to close the application...");
   System.Console.ReadLine();
}

The sample source file, you downloaded from the above link, shows the complete code and, how everything works together.

Points of Interest

You probably must have wondered, if the same code works on other blog servers, the answer is yes and no. Yes, it can, but you have to change some code. For example, the data being sent to different blog servers are different. You need to have some network level programming knowledge in order to get these done. There are programs to help you, such as Ethereal or Paros.

Security Notes

There are several points worth mentioning. While you may find the code useful because you can add blogging functionalities to your e-mail clients and instant messenger clients, this (along with some creativity and imagination) can be misused and it can cause security threats:

  • Spoofing Identity: Adversary can brute force username and password programmatically, possibly using dictionary attack.
  • Tampering of Data: Adversary can change the content of cookies and session keys. This is also known as cookie poisoning.
  • Information Disclosure: Adversary can collect information about how data is passed between pages.
  • Denial of Service: Adversary can create arbitrary number of threads to log in at the same time, thus consuming all of server resources.
  • Elevation of Privilege: Adversary may be able to change request type, to carry out operations which may not be permitted to that user account. For example, the adversary might inject HTML tags that are supposed to be restricted by the client browser.

Questions?

It is difficult for me, to try to explain everything. Please ask me, if there is anything that is not clear. I will try to answer them as clearly as possible.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Kelvin Tsang


Member
Kelvin Tsang is a software security guru who likes to play bridge when he is free.
Location: Canada Canada

Other popular Internet / Network articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 16 of 16 (Total in Forum: 16) (Refresh)FirstPrevNext
Generalnot working with the similar code to connect to asp chat server Pinmemberniqing12:36 14 Jul '07  
GeneralUgly but working solution PinmemberASPCode.net3:51 12 Jun '07  
Generalthe code doesnt work Pinmemberlol18786:48 17 May '07  
GeneralUploading files in similar way? Pinmemberalex99134:22 17 Jul '06  
GeneralVery useful idea. Have you tried to use it on, say, Yahoo email? Pinmembertank20915:05 7 May '06  
GeneralRe: Very useful idea. Have you tried to use it on, say, Yahoo email? PinmemberKelvin Tsang16:56 7 May '06  
GeneralIts not working Pinmembersaishyam20:36 1 Mar '06  
GeneralRe: Its not working PinmemberKelvin Tsang5:57 2 Mar '06  
Generalsome observtions Pinmembercaiafaverde23:33 21 Feb '05  
GeneralRe: some observtions PinmemberKelvin Tsang6:03 22 Feb '05  
Generalhow to post data other than IIS server such as Apachi PinmemberMohdYounisKhan1:08 17 Feb '05  
GeneralRe: how to post data other than IIS server such as Apachi PinmemberKelvin Tsang20:39 24 Feb '05  
GeneralInteresting, it would be better if... Pinmemberzumanity015:50 29 Jan '05  
GeneralRe: Interesting, it would be better if... PinmemberKelvin Tsang16:43 29 Jan '05  
GeneralNot a bad read, albeit a little short. PinmemberAdam Goossens0:54 21 Jan '05  
GeneralRe: Not a bad read, albeit a little short. PinmemberKelvin Tsang7:45 21 Jan '05  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 20 Jan 2005
Editor: Rinish Biju
Copyright 2005 by Kelvin Tsang
Everything else Copyright © CodeProject, 1999-2009
Web18 | Advertise on the Code Project