亚瑟狼

网络的精神就是共享
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

C#登陆包

Posted on 2008-06-21 06:18  冯满天  阅读(930)  评论(0)    收藏  举报
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");
       
    }

//正确的帐号被我隐藏!!