HttpWebRequest Keeping Cookie Alive

Before, I had a hard time understanding on how to keep a certain session alive when using HttpWebRequest, and accessing a protected page where it requires login.

it turns out to be very easy, all you need to do is set the CookieContainer, notice that I declared the CookieContainer as static. This is so that different request can share the same cookie.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Net;

namespace WebRequestSample
{
public abstract class RequestBase
{
   protected static CookieContainer cookieContainer = null;

   protected HttpWebRequest CreateRequest(string uri)
   {
       if (RequestBase.cookieContainer == null)
           RequestBase.cookieContainer = new CookieContainer();

       HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
       request.CookieContainer = cookieContainer;
       return request;
   }
}
}


Now all you need to do is inherit RequestBase. and call CreateRequest

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Net;

namespace WebRequestSample
{
    public class SampleRequest : RequestBase
    {
  public void Login(string postToFormAddress, string username, string password) 
  {
   HttpWebRequest request = this.CreateRequest(postToFormAddress);
   //note: you need to check the html form and make sure to post all input variables including the submit button value
            string loginData = string.Format("username={0}&password={1}&submit=login", username, password);


            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] loginDataBytes = encoding.GetBytes(loginData);

            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";

            request.ContentLength = loginDataBytes.Length;
            Stream stream = request.GetRequestStream();
            stream.Write(loginDataBytes, 0, loginDataBytes.Length);
            stream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
   
   StreamReader sr = new StreamReader(response.GetResponseStream());
            string htmlBuffer = sr.ReadToEnd();
   
   // todo: check the htmlBuffer if it contains data that requires login, if you find it then you have successfuly logged in!
  }
    }
}

Leave a Reply

Proudly powered by Blogger
Theme: Esquire by Matthew Buchanan.
Converted by LiteThemes.com.