清晰的认识我想类库里面的属性和方法都是神马和浮云。
五 :案例
既然是上篇,就根据“模拟登录”的思想做一个简单的“暴力破解”的小程序,非常简单,呵呵。
第一步: 首先我们写两个action,一个login(登录页面),一个index(用户后台首页)。
namespace Test.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Login()
{
return View();
}
[HttpPost]
public ActionResult Index(Model model)
{
if (model.UserName == "11" && model.Password == "11")
return View(model);
else
return RedirectToAction("Login");
}
public ActionResult About()
{
return View();
}
}
public class Model
{
public string UserName { get; set; }
public string Password { get; set; }
}
}

好了,我们打开fiddler,输入admin,admin,点击提交,看看都post些什么到server端了,方便我们后面的模拟登录,
这里的head信息相信大家还是能看懂吧。

第二步:我们新建一个winform的程序。
namespace Http
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//网页内容填充webbrowser1控件
string url = "http://localhost:59773/";
//创建http链接
var request = (HttpWebRequest)WebRequest.Create(url);
var response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader sr = new StreamReader(stream);
string content = sr.ReadToEnd();
webBrowser1.DocumentText = content;
}
/// <summary>
/// 暴力破解
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
var url = "http://localhost:59773/Home/Index";
//上一次的返回结果
string prev = string.Empty;
for (int i = 0; i < 100; i++)
{
var username = new Random(DateTime.Now.Millisecond).Next(8, 19).ToString();
Thread.Sleep(2);
var password = new Random(DateTime.Now.Millisecond).Next(8, 19).ToString();
//post提交的内容
var content = "username=" + username + "&password=" + password;
//将content变为字节形式
var bytes = Encoding.UTF8.GetBytes(content);
var request = (HttpWebRequest)WebRequest.Create(url);
//根据fiddler中查看到的提交信息,我们也试着模拟追加此类信息然后提交
request.Method = WebRequestMethods.Http.Post;
request.Timeout = 1000 * 60;
request.AllowAutoRedirect = true;
request.ContentLength = bytes.Length;
request.ContentType = "application/x-www-form-urlencoded";
//将content写入post请求中
var stream = request.GetRequestStream();
stream.Write(bytes, 0, bytes.Length);
stream.Close();
//写入成功,获取请求流
var response = (HttpWebResponse)request.GetResponse();
var sr = new StreamReader(response.GetResponseStream());
var next = sr.ReadToEnd();
if (string.IsNullOrEmpty(prev))
{
prev = next;
}
else
{
if (prev != next)
{
webBrowser2.DocumentText = next;
MessageBox.Show("恭喜你,密码已经破解!一共花费:" + (i + 1) + "次,用户名为:" + username + ",密码为:" + password);
return;
}
}
}
webBrowser2.DocumentText = "不好意思,未能破解";
}
}
}










