asp.net c#采集需要登录页面的实现原理及代码

时间:2021-05-28

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

实现原理:当我们采集页面的时候,如果被采集的网站需要登录才能采集。不管是基于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,存入Hashtable
Hashtable 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:///需要登录后才能采集的页面";//***************
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。

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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章