原文地址:http://www.cnblogs.com/subendong/archive/2013/01/31/2886568.html

首先说明:代码片段是从网络获取,然后自己修改。我想好的东西应该拿来分享。

先说下原理:当我们采集页面的时候,如果被采集的网站需要登录才能采集。不管是基于Cookie还是基于Session,我们都会首先发送一个Http请求头,这个Http请求头里面就包含了网站需要的Cookie信息。当网站接收到发送过来的Http请求头时,会从Http请求头获取相关的Cookie或者Session信息,然后由程序来处理,决定你是否有权限访问当前页面。

好了,原理搞清楚了,就好办了。我们所要做的仅仅是在采集的时候(或者说HttpWebRequest提交数据的时候),将Cookie信息放入Http请求头里面就可以了。

在这里我提供2种方法。

第一种,直接将Cookie信息放入HttpWebRequest的CookieContainer里。看代码:

protected void Page_Load(object sender, EventArgs e){//设置Cookie,存入HashtableHashtable ht = new Hashtable();ht.Add("username", "youraccount");ht.Add("id", "yourid");this.Collect(ht);}public void Collect(Hashtable ht){string content = string.Empty;string url = "http://www.ibest100.com/需要登录后才能采集的页面";string host = "http://www.ibest100.com";try{//获取提交的字节byte[] bs = Encoding.UTF8.GetBytes(content);//设置提交的相关参数HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);req.Method = "POST";req.ContentType = "application/json;charset=utf-8";req.ContentLength = bs.Length;//将Cookie放入CookieContainer,然后再将CookieContainer添加到HttpWebRequestCookieContainer cc = new CookieContainer();cc.Add(new Uri(host), new Cookie("username", ht["username"].ToString()));cc.Add(new Uri(host), new Cookie("id", ht["id"].ToString()));req.CookieContainer = cc;//提交请求数据Stream reqStream = req.GetRequestStream();reqStream.Write(bs, 0, bs.Length);reqStream.Close();//接收返回的页面,必须的,不能省略WebResponse wr = req.GetResponse();System.IO.Stream respStream = wr.GetResponseStream();System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("utf-8"));string t = reader.ReadToEnd();System.Web.HttpContext.Current.Response.Write(t);wr.Close();}catch (Exception ex){System.Web.HttpContext.Current.Response.Write("异常在getPostRespone:" + ex.Source + ":" + ex.Message);}}

第二种,每次打开采集程序时,需要先到被采集的网站模拟登录一次,获取CookieContainer,然后再采集。看代码:

protected void Page_Load(object sender, EventArgs e){try{CookieContainer cookieContainer = new CookieContainer();string formatString = "username={0}&password={1}";//***************string postString = string.Format(formatString, "youradminaccount", "yourpassword");//将提交的字符串数据转换成字节数组byte[] postData = Encoding.UTF8.GetBytes(postString);//设置提交的相关参数string URI = "http://www.ibest100.com/登录页面";//***************HttpWebRequest request = WebRequest.Create(URI) as HttpWebRequest;request.Method = "POST";request.KeepAlive = false;request.ContentType = "application/x-www-form-urlencoded";request.CookieContainer = cookieContainer;request.ContentLength = postData.Length;// 提交请求数据System.IO.Stream outputStream = request.GetRequestStream();outputStream.Write(postData, 0, postData.Length);outputStream.Close();//接收返回的页面,必须的,不能省略HttpWebResponse response = request.GetResponse() as HttpWebResponse;System.IO.Stream responseStream = response.GetResponseStream();System.IO.StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("gb2312"));string srcString = reader.ReadToEnd();//打开您要访问的页面URI = "http://www.ibest100.com/需要登录后才能采集的页面";//***************request = WebRequest.Create(URI) as HttpWebRequest;request.Method = "GET";request.KeepAlive = false;request.CookieContainer = cookieContainer;// 接收返回的页面response = request.GetResponse() as HttpWebResponse;responseStream = response.GetResponseStream();reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("gb2312"));srcString = reader.ReadToEnd();//输出获取的页面或者处理Response.Write(srcString);}catch (WebException we){string msg = we.Message;Response.Write(msg);}}

也许有人会问,如果对方登录的时候要验证码怎么办?那你就用第一种方式吧,只不过需要你分析对方的Cookie。

应用范围:采集数据、论坛发帖、博客发文。

转载于:https://www.cnblogs.com/fcsh820/archive/2013/02/07/2908917.html

(转)asp.net c#如何采集需要登录的页面?相关推荐

  1. ASP.NET判断是否为手机登录

    ASP.NET判断是否为手机登录 protected void Page_Load(object sender, EventArgs e){MobileHandle();} 页面加载时候判断是否为手机 ...

  2. ASP.NET Core 中简单Session登录校验

    ASP.NET Core 中简单Session登录校验:从Session的配置添加.到请求过滤.再到页面操作.推荐相关阅读:ASP.NET 会话状态概述  ASP.NET Cookie 概述  ASP ...

  3. webmagic采集CSDN的Java_WebDevelop页面

    项目中使用到了webmagic,采集论坛一类的页面时需要一些特殊的配置.在此记录一下 先来看看我要采集的页面 点击第2页可以看到它的url是http://bbs.csdn.net/forums/Jav ...

  4. 如何以sys用户登录oracle,在Oracle 10g 中如何以sys的身份登录isqlplus页面

    在linux上安装完成Oracle 10g以后,我们常常会用到isqlplus来执行SQL语句.但正常的isqlplus登录界面只支持以普通用户的身份进行登录,而我们有时又必须用到sys身份的权限才能 ...

  5. jsf登录注册页面_您将在下一个项目中使用JSF吗?

    jsf登录注册页面 上周有一篇很棒的stackoverflow博客文章,主题是" Javascript框架的残酷生命周期" . 这篇文章是关于Javascript UI框架(ang ...

  6. 天猫php采集列表,QueryList: QueryList是一个基于phpQuery的通用列表采集类,是一个简单、 灵活、强大的采集工具,采集任何复杂的页面 基本上就一句话就能搞定了。...

    #QueryList交流社区: http://querylist.cc/ #QueryList文档: http://doc.querylist.cc/ #QueryList交流QQ群:12326696 ...

  7. ASP.NET - 截取固定长度字符串显示在页面,多余部分显示为省略号

    ASP.NET - 截取固定长度字符串显示在页面,多余部分显示为省略号 方法一: publicstaticstring GetString(string str, int length){int i ...

  8. mvc3中正确处理ajax访问需要登录的页面

    mvc3中有Ajax.ActionLink和Ajax.BeginForm两个方法用来生成ajax的连接和ajax的表单提交. 但是当要访问的连接是一个需要登录的页面,显示时就不太友好了 我简单模拟了一 ...

  9. Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】

    应用情形:在web项目中,经常会遇到用户未登录或SESSION失效时用户发出非法的权限操作,如新闻的评论.文件的下载等等,在此我们可以使用struts拦截器对该用户发出的请求进行拦截,拦截后判断用户是 ...

  10. php登陆页面修改密码的功能,使用bootstrap创建登录注册页面并实现表单验证功能...

    本篇文章给大家介绍一下使用bootstrap创建登录注册页面并实现单验证功能的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 用bootstrap做登入注册页面,使用valid ...

最新文章

  1. 安卓adb常用简单指令
  2. DataSet case sensitive issue
  3. Qt Creator选择模式
  4. MKNetWorkKit使用方法
  5. 10玩rust_C++工程师的Rust迁移之路(5)- 继承与组合 - 下
  6. Boostrap技能点整理之【bootstrap简介】
  7. arraylist怎么在mysql中排序_对ArrayList中对象元素进行排序
  8. RQNOJ PID379 / 约会计划 -并查集
  9. 全面了解IDC数据中心
  10. WordPress实现评论显示IP归属地方法
  11. 有各组方差怎么算组间平方和_方差分析:组间离差平方和组内离差平方的定义是什么?...
  12. 基于Impala的网易有数BI查询优化总结
  13. JavaScript--AJAX页面传值
  14. python turtle库输出文字_Python 海龟 turtle 画图讲解 (五):输入/输出文字及鼠标与键盘交互设计...
  15. 成都网络推广浅析怎样让网站的文章能够快速收录?
  16. python——经纬度坐标和平面投影坐标的相互转换
  17. gbq可以算出土建量吗_广联达土建算量软件问题合集100条(上)
  18. 达梦数据库自动替换功能详解
  19. php mysql书有什么_关于 PHP 的好书有哪些?
  20. 川大2019计算机硕土论文盲审,关于2019年研究生学位论文答辩和学位申请工作安排的通知...

热门文章

  1. 文本分类的python实现-基于Xgboost算法
  2. 机器学习(八)——SVD推荐系统
  3. c语言随机抽取小程序_c++ c语言编写抽学号小程序
  4. java referencemap_Java中关于WeakReference和WeakHashMap的理解
  5. spring boot 相关快捷内置类和配置
  6. Jasypt 开源加密库使用教程
  7. Android 资源(Resources)访问
  8. layui-treeTable v2.0添加搜索功能
  9. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_05-CMS需求分析-什么是CMS...
  10. 小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战...