C#网站登录学习笔记(一):登录简单网站

    最近在园子里看到 深蓝 写的几篇关于网站登录的文章,觉得挺好玩,挺感有趣的,遂决定学习一下。但凡学习都有一个渐进的过程,以下是自己初步制定的学习步骤:
    1. 在本地创建一个简单的网站,尝试用C#登陆;
    2. 在网上找一个不需要验证码就可以登录的网站,尝试用C#登陆;
    3. 在网上找一个需要验证码才能登录的网站,尝试用C#登陆


    一、创建最简单的测试网站:该网站只包含两个页面:Default.aspx(登录页面)和LoginSuccess.asp(登录成功页面)。其中,当用户在Default.aspx页面中登录成功后,系统将跳转到登录成功页面;登录成功页面只有登录后才能访问;网站用Session保存、判断用户是否登录。

    二、抓包分析:通过抓包,初步了解登录网站需要的数据。这里使用HTTP Analyzer工具进行抓包,进行抓包时,应关闭其他可能访问网络的软件,减少其他无用包对数据分析造成影响。
        1. 打开HTTP Analyzer,启动抓包;
        2. 用浏览器访问登录页面(http://localhost/TestLogin/Default.aspx);
        3. 输入用户名、密码,登录网站(登录后,系统将自动转向登录成功页面http://localhost/TestLogin/LoginSuccess.aspx)

(图一)

(图二)

    三、编写C#程序实现网站登录
        1. 首先了解一下,如何使用HttpWebRequest、HttpWebResponse、Stream来访问一般的页面,只需要使用简单的代码就OK了:
public string GetHtml(string url)
{
    HttpWebRequest httpWebRequest;

    httpWebRequest 
= (HttpWebRequest)HttpWebRequest.Create(url); // url = "http://localhost/TestLogin/Default.aspx"

    HttpWebResponse httpWebResponse;
    httpWebResponse 
= (HttpWebResponse)httpWebRequest.GetResponse();
    Stream responseStream 
= httpWebResponse.GetResponseStream();
    StreamReader streamReader 
= new StreamReader(responseStream, Encoding.UTF8);
    
string html = streamReader.ReadToEnd();
    streamReader.Close();
    responseStream.Close();

    
return html;
}


        2. 如果含有PostData,那么还需指定HttpWebRequest的相关属性,这些属性值可从抓包中获取:
public string GetHtml(string url, string postData, Method method)
{
    
byte[] byteRequest = Encoding.Default.GetBytes(postData);
// postData = "__VIEWSTATE=%2FwEPDwULLTExNTc2NTI3OTlkZNLUwsKE0KKoVuCh7ELNz2cjAKBU&txtUserName=a&txtPassword=b&btnLogin=Login&__EVENTVALIDATION=%2FwEWBAKfnfTIDwKl1bKzCQK1qbSRCwKC3IeGDM%2FBt6kokoXv5qmx7K4EgFwj1si0"

    HttpWebRequest httpWebRequest;
    httpWebRequest 
= (HttpWebRequest)HttpWebRequest.Create(url);  // url = "http://localhost/TestLogin/Default.aspx"

    httpWebRequest.ContentType 
= contentType;
    httpWebRequest.Referer 
= referer;
    httpWebRequest.Accept 
= accept;
    httpWebRequest.UserAgent 
= userAgent;
    httpWebRequest.Method 
= method == Method.POST ? "POST" : "GET";
    httpWebRequest.ContentLength 
= byteRequest.Length;

    Stream stream 
= httpWebRequest.GetRequestStream();
    stream.Write(byteRequest, 
0, byteRequest.Length);
    stream.Close();

    HttpWebResponse httpWebResponse;
    httpWebResponse 
= (HttpWebResponse)httpWebRequest.GetResponse();
    Stream responseStream 
= httpWebResponse.GetResponseStream();
    StreamReader streamReader 
= new StreamReader(responseStream, Encoding.UTF8);
    
string html = streamReader.ReadToEnd();
    streamReader.Close();
    responseStream.Close();

    
return html;
}


        下图是在程序中调用以上代码访问登录页面后的抓包结果,可以发现登陆成功了:


        在下一篇的笔记中,将描述如何访问需要登录后才能访问的页面(相关的代码也将在下一篇笔记中给出)。
posted @ 2008-05-10 15:54  Jailu  阅读(10152)  评论(7编辑  收藏  举报