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了:
2. 如果含有PostData,那么还需指定HttpWebRequest的相关属性,这些属性值可从抓包中获取:
下图是在程序中调用以上代码访问登录页面后的抓包结果,可以发现登陆成功了:
在下一篇的笔记中,将描述如何访问需要登录后才能访问的页面(相关的代码也将在下一篇笔记中给出)。
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;
}
{
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;
}
{
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;
}
下图是在程序中调用以上代码访问登录页面后的抓包结果,可以发现登陆成功了:
在下一篇的笔记中,将描述如何访问需要登录后才能访问的页面(相关的代码也将在下一篇笔记中给出)。