c#抓取网页数据(代码如下:5抓取网页内容-把当前会话(组图) )
优采云 发布时间: 2021-10-12 00:22c#抓取网页数据(代码如下:5抓取网页内容-把当前会话(组图)
)
其次,使用 CookieContainer。
查看普通副本到剪贴板打印?
代码如下:
System.Net.CookieContainer cc = new System.Net.CookieContainer();
request.CookieContainer = cc;
request2.CookieContainer = cc;
这样,request和request2之间使用了同一个Session。如果 request 已登录,则 request2 也已登录。
最后,如何在不同页面之间使用相同的CookieContainer。
不同页面之间要使用同一个CookieContainer,只需要在Session中添加CookieContainer即可。
代码如下:
view plaincopy to clipboardprint?
Session.Add("ccc", cc); //存
CookieContainer cc = (CookieContainer)Session["ccc"]; //取
5 抓取网页内容——将当前会话带到 WebRequest
比如浏览器B1访问服务器端S1,这会产生一个会话,服务器端S2使用WebRequest访问服务器端S1,就会产生一个会话。当前要求WebRequest使用浏览器B1和S1之间的会话,这意味着S1应该认为B1正在访问S1,而不是S2正在访问S1。
这是为了使用cookies。先在S1中获取SessionID为B1的Cookie,然后将这个Cookie告诉S2,S2将Cookie写入WebRequest中。
查看普通副本到剪贴板打印?
代码如下:
WebRequest request = WebRequest.Create("url");
request.Headers.Add(HttpRequestHeader.Cookie, "ASPSESSIONIDSCATBTAD=KNNDKCNBONBOOBIHHHHAOKDM;");
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("gb2312"));
Response.Write(reader.ReadToEnd());
reader.Close();
reader.Dispose();
response.Close();
我想解释一下:
本文不是 Cookie 欺骗,因为 SessionID 是 S1 告诉 S2 的,并没有被 S2 窃取。虽然有点奇怪,但在某些特定的应用系统中可能会有用。
S1 必须将 Session 写入 B1,这样 SessionID 将保存在 Cookie 中,SessionID 将保持不变。
Request.Cookies 用于在 ASP.NET 中获取 cookie。本文假设已获取 cookie。
不同的服务器端语言对Cookie中的SessionID有不同的名称。本文为ASP SessionID。
S1 可能不仅依赖 SessionID 来确定当前登录,还可能辅助 Referer、User-Agent 等,具体取决于 S1 终端程序的设计。
这篇文章其实是本系列中另一种“保持登录”的方式。
6 抓取网页内容-如何更改源Referer和UserAgent
查看普通副本到剪贴板打印?
代码如下:
SPAN class="caution">HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://127.0.0.1/index.htm");
//request.Headers.Add(HttpRequestHeader.Referer, "http://www.jb51.net/"); // 错误
//request.Headers[HttpRequestHeader.Referer] = "http://www.jb51.net/"; // 错误
request.Referer = "http://www.jb51.net/"; // 正确
注释掉的两句错了,会报错:
查看普通副本到剪贴板打印?
必须使用适当的属性修改此标头。
参数名称:名称
必须使用适当的属性修改此标头。参数名称:名称
UserAgent 类似。