SAL

  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

【转】HttpWebRequest 保持session

Posted on 2013-08-20 13:10  SAL  阅读(1063)  评论(0编辑  收藏  举报

通过HttpWebRequest获取网页内容并保持session,最主要的就是存储cookie。这里使用了一个静态变量m_Cookie用来存储cookie的内容。第二次请求网页的时候把cookie传送过去,这样就可以保持session。

 

  1. public partial class RequestPage : System.Web.UI.Page  
  2.     {  
  3.         private static CookieContainer m_Cookie = new CookieContainer();  
  4.         private string m_Url = "http://localhost/HttpRequestTest/SessionPage.aspx";  
  5.         protected void Page_Load(object sender, EventArgs e)  
  6.         {  
  7.             string content = GetPageContent();  
  8.             //string content = GetPageContent(m_Url);  
  9.             Label1.Text = content;  
  10.         }  
  11.   
  12.         /// <summary>  
  13.         /// 获取页面内容,保存CookieHeader  
  14.         /// </summary>  
  15.         /// <returns></returns>  
  16.         private string GetPageContent()  
  17.         {  
  18.             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(m_Url);  
  19.             request.CookieContainer = m_Cookie;  
  20.             HttpWebResponse response = (HttpWebResponse)request.GetResponse();  
  21.             string cookieheader = request.CookieContainer.GetCookieHeader(new Uri(m_Url));  
  22.             m_Cookie.SetCookies(new Uri(m_Url), cookieheader);  
  23.   
  24.             Stream stream = response.GetResponseStream();  
  25.             StreamReader reader = new StreamReader(stream);  
  26.             string result = reader.ReadToEnd();  
  27.   
  28.             stream.Close();  
  29.             reader.Close();  
  30.             response.Close();  
  31.   
  32.             return result;  
  33.         }  
  34.   
  35.         /// <summary>  
  36.         /// 获取页面内容,存储CookieContainer  
  37.         /// </summary>  
  38.         /// <param name="url">被请求页面的url</param>  
  39.         /// <returns>返回页面内容</returns>  
  40.         public string GetPageContent(string url)  
  41.         {  
  42.             StringBuilder result = new StringBuilder("");  
  43.             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); ;  
  44.             HttpWebResponse reponse = null;  
  45.             try  
  46.             {  
  47.                 request.CookieContainer = m_Cookie;  
  48.                 reponse = (HttpWebResponse)request.GetResponse();  
  49.                 m_Cookie = request.CookieContainer;  
  50.                 Stream rspStream = reponse.GetResponseStream();  
  51.                 StreamReader sr = new StreamReader(rspStream, System.Text.Encoding.Default);  
  52.   
  53.                 //获取数据  
  54.                 Char[] read = new Char[256];  
  55.                 int count = sr.Read(read, 0, 256);  
  56.                 while (count > 0)  
  57.                 {  
  58.                     result.Append(read, 0, count);  
  59.                     count = sr.Read(read, 0, 256);  
  60.                 }  
  61.             }  
  62.             catch (Exception e)  
  63.             {  
  64.                 result.Append(e.Message);  
  65.             }  
  66.             finally  
  67.             {  
  68.                 if (reponse != null)  
  69.                 {  
  70.                     reponse.Close();  
  71.                 }  
  72.             }  
  73.             return result.ToString();  
  74.         }  
  75.     }