通过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. /// <summary>
  12. /// 获取页面内容,保存CookieHeader
  13. /// </summary>
  14. /// <returns></returns>
  15. private string GetPageContent()
  16. {
  17. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(m_Url);
  18. request.CookieContainer = m_Cookie;
  19. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  20. string cookieheader = request.CookieContainer.GetCookieHeader(new Uri(m_Url));
  21. m_Cookie.SetCookies(new Uri(m_Url), cookieheader);
  22. Stream stream = response.GetResponseStream();
  23. StreamReader reader = new StreamReader(stream);
  24. string result = reader.ReadToEnd();
  25. stream.Close();
  26. reader.Close();
  27. response.Close();
  28. return result;
  29. }
  30. /// <summary>
  31. /// 获取页面内容,存储CookieContainer
  32. /// </summary>
  33. /// <param name="url">被请求页面的url</param>
  34. /// <returns>返回页面内容</returns>
  35. public string GetPageContent(string url)
  36. {
  37. StringBuilder result = new StringBuilder("");
  38. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); ;
  39. HttpWebResponse reponse = null;
  40. try
  41. {
  42. request.CookieContainer = m_Cookie;
  43. reponse = (HttpWebResponse)request.GetResponse();
  44. m_Cookie = request.CookieContainer;
  45. Stream rspStream = reponse.GetResponseStream();
  46. StreamReader sr = new StreamReader(rspStream, System.Text.Encoding.Default);
  47. //获取数据
  48. Char[] read = new Char[256];
  49. int count = sr.Read(read, 0, 256);
  50. while (count > 0)
  51. {
  52. result.Append(read, 0, count);
  53. count = sr.Read(read, 0, 256);
  54. }
  55. }
  56. catch (Exception e)
  57. {
  58. result.Append(e.Message);
  59. }
  60. finally
  61. {
  62. if (reponse != null)
  63. {
  64. reponse.Close();
  65. }
  66. }
  67. return result.ToString();
  68. }
  69. }

【转】HttpWebRequest 保持session的更多相关文章

  1. HttpWebRequest 保存Cookies,模拟Session登录

    前面使用HttpWebRequest 对象可以抓取网页中一些资料,不过有些页面可以直接打开,而有些页面必登录之后才能打开,也就是在登录后保存登录信息在Session,这样就可以访问有权限的页面了.下面 ...

  2. HttpWebRequest调用WebService后台需要Session信息问题的解决办法

    今天在用HttpWebRequest调用后台ASP.NET 的WebService方法时遇到了一个问题,后台的WebService方法里使用到了Session对象中的用户信息,而Session对象中的 ...

  3. web也是区分前端与后端的,session\cookie辨析

    <1>Ajax交互方式 Ext.Ajax.request( { //被用来向服务器发起请求默认的url url : "", //请求时发送后台的参数,既可以是Json对 ...

  4. 通过HttpWebRequest请求与HttpWebResponse响应方式发布接口与访问接口

    一.API接口的编码 1.首页的页面代码: protected void Page_Load(object sender, EventArgs e) { /* * 请求路径:http://xxxx/i ...

  5. C#的提交表单方式主要有两种WebClient与HttpWebRequest

    根据黄聪:C#模拟网站页面POST数据提交表单(转) using System; using System.Collections.Generic; using System.IO; using Sy ...

  6. C#获得和发送网站Session

    request = (HttpWebRequest)WebRequest.Create(url);                                         if (Const. ...

  7. 利用HttpWebRequest和HttpWebResponse获取Cookie

    之前看过某个同学的一篇有关与使用JSoup解析学校图书馆的文章,仔细一看,发现竟然是同校!!既然对方用的是java,那么我也就来个C#好了,虽然我的入门语言是java. C#没有JSoup这样方便的东 ...

  8. C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse

    上次介绍了用WebClient的方式提交POST请求,这次,我继续来介绍用其它一种方式 HttpWebRequest以及HttpWebResponse 自认为与上次介绍的WebClient最大的不同之 ...

  9. WebApi 能支持Session

    由于项目实际需要,我希望让WebApi服务也能支持Session,所以便查找资料按照网上的方法开始着手实验. 然后就有了以下的代码,主要是说让WebApi支持Session,要重写Global.asa ...

随机推荐

  1. duilib入门简明教程 -- XML基础类(7)

    现在大家应该对XML描述界面不那么陌生了,那么我们做进一步介绍. 前面的教程我们写了很多代码,为的是让大家了解下基本流程,其实duilib已经对常用的操作做了很好的包装,正式使用时无需像前面的教程那样 ...

  2. 【Newtonsoft.Json.dll】操作列表JSON数据

    JObject data = JObject.Parse(json); JArray array = JArray.Parse(data["list"] + "" ...

  3. 牛客网提高组模拟赛第七场 T3 洞穴(附bitset介绍)

    就是DP. 我们可以很简单的想到要枚举中间点,进行边数的转移. 但是因为边长数据范围很大,所以我们考虑log的倍增. 状态设计为\(dp[i][j][k]\),为从节点\(i\)走\(2^k\)步能否 ...

  4. 广告小程序后端开发(2.Models设计)

    1.users的数据表设计: 1.重建用户表: 1.在settings中配置: AUTH_USER_MODEL='users.UserProfile' 2.apps/users/models.py中建 ...

  5. “全栈2019”Java第二十六章:流程控制语句中循环语句do-while

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. linux的档案权限和目录配置

    Linux一般将档案可存取的身份分为三个类别,分别是 owner/group/others /etc/passwd  账号信息 /etc/shadow 个人密码 /etc/group    组名记录 ...

  7. Your branch is ahead of 'origin/master' by 1 commit.

    git reset HEAD^ --soft git reset HEAD^ --hard --soft 表示保留当前commit,重新commit --hard 表示丢弃当前add,重新add.co ...

  8. [web]深入理解Session和Cookie

    一.理解Cookie 由于http是一种无状态的协议,当用户的一次访问结束后,后端的服务器就无法知道下一次来访问的请求是不是上一次的用户了.那么Cookie的作用就是用户通过http访问一个服务器时, ...

  9. 海思3519A上移植OpenCV3.x

    环境安装与准备 下载opencv3.4.1. 或者 下载opencv3.2.0. 进入到opencv所在的目录新建目录build,install 安装cmake: apt-get install cm ...

  10. 转一个财务方面常用到的数字金额转成汉字大写金额 php类

    系统里有牵扯到财务.合同等方面的处理时,常常需要把数字金额转成汉字大写金额(貌似这样正规),转一个转换的php class吧!<?php// 诸海加(ALPHA .z)// 2000-7-19 ...