|
|
Posted on
2008-06-21 06:18
冯满天
阅读( 930)
评论()
收藏
举报
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;

namespace GrabData
  {
public class Login
 {
HttpWebRequest request;

 /**//// <summary>
/// 进入一个登陆页面,以Post方法向该网页提交登陆数据,然后返回Cookies
/// </summary>
/// <param name="PostData">传入登陆数据(帐号和密码)</param>
/// <param name="URL">传入表单的Action所指向的地址</param>
/// <returns></returns>
public CookieContainer GetCookies(byte[] PostData, string SEntry)
 {
try
 {
CookieContainer CC = new CookieContainer();//建立一个存储cookies的集合
request = (HttpWebRequest)WebRequest.Create(SEntry);//请求一个网址的login page
request.Method = "POST";//post请求
request.AllowAutoRedirect = false;//不设定重定向
request.ContentLength = PostData.Length;//设定请求字节的长度
request.ContentType = "application/x-www-form-urlencoded";//Post所有
request.CookieContainer = CC;//设置请求的CookieContainer为刚才建立的那个CC
Stream sm = request.GetRequestStream();//得到请求流
sm.Write(PostData, 0, PostData.Length);//写入请求流
sm.Close();//关闭流
return CC;//返回CookieContainer
}
catch (Exception ex)
 {
StreamWriter sw = new StreamWriter(@"C:\LoginWrong.xt", true, Encoding.Default);
sw.Write("错误原因如下:\n\n" + ex.ToString());
sw.Close();
throw new Exception();
}
}

 /**//// <summary>
/// 得到服务器Cookies,然后以该Cookies作为凭证登陆,然后获取登陆所拥有的权限!
/// </summary>
/// <param name="CC">得到Cookies集合</param>
/// <param name="GrabUrl">传入需要抓取的URL</param>
/// <returns></returns>
public string GetWeb(CookieContainer CC, string GrabUrl)
 {
HttpWebResponse response = (HttpWebResponse)request.GetResponse();//定义一个http响应对象,获取到请求流
request = (HttpWebRequest)WebRequest.Create(GrabUrl);//请求网址
request.CookieContainer = CC;//这个时候这个CC里面已经存储了Cookies,把它附加到请求网址中,这样便可以通过登陆
response = (HttpWebResponse)request.GetResponse();//得到请求流
using (Stream sm = response.GetResponseStream())//得到响应流
 {
using (StreamReader sr = new StreamReader(sm, System.Text.Encoding.Default))
 {
string strResult = sr.ReadToEnd();//把服务器返回的结果赋值给字符串
response.Close();//关闭响应流
return strResult;//返回,终止!
}
}
}
}
}

调用:

static void Main(string[] args)
 {
Login LG = new Login();
byte[] PostData = Encoding.Default.GetBytes("Email=aaaaa&Passwd=dfd&PersistentCookie=");
CookieContainer CC = LG.GetCookies(PostData, "https://www.google.com/accounts/ServiceLoginAuth?service=mail");
string strResults = LG.GetWeb(CC, "https://www.google.com/accounts/EditEmail");
}
//正确的帐号被我隐藏!!

|