zoukankan      html  css  js  c++  java
  • [转]使用c# 模拟网站登录

    我们在写灌水机器人、抓资源机器人和Web网游辅助工具的时候第一步要实现的就是用户登录。那么怎么用C#来模拟一个用户的登录拉要实现用户的登录,那么首先就必须要了解一般网站中是怎么判断用户是否登录的。

    HTTP协议是一个无连接的协议,也就是说这次对话的内容和状态与上次的无关,为了实现和用户的持久交互,网站与浏览器之前在刚建立会话时将在服务 器内存中建立一个Session,该Session标识了该用户(浏览器),每一个Session都有一个唯一的ID,第一次建立会话时服务器将生成的这 个ID传给浏览器,浏览器在接下来的浏览中每一个发向服务器的请求中都将包含该SessionID,从而标识了自己的身份。

    服务器上是使用内存来保存Session中的信息,那么浏览器又使用什么来保存服务器分配的这个SessionID了对,是Cookie。在刚建立 会话时浏览器向服务器的请求中将不包含SessionID在Cookie中,服务器就认为是一个全新的会话,从而在服务器上分配一段内存给该 Session用,同时将该Session的ID在Http Header中使用Set-Cookie发送给浏览器。

    现在原理已经搞清楚了,那么我们就来实现一个网站的登录嘛。下面以某某大学的管理信息系统来进行检验(注意:这里的缺陷就在于没有验证码的识别和多个服务器的跳转)难度相对来说要小很多。

     首先先用httpAnaly或者是httpwatch等专用的抓包工具,来获取网页提交时候的数据信息和头信息。以下代码包含了登陆和在登陆后获取另一个页面数据信息。
     1        private void Form1_Load(object sender, EventArgs e)
     2        {
     3
     4            string username = "xxxx";//用户名
     5            string password = "xxxx";//密码
     6           //新建一个用于保存cookies的容器    
     7            CookieContainer container = new CookieContainer();
     8           //拼接post数据
     9            string postData = ("username=" + username);
    10            postData += ("&passwd=" + password);
    11            postData += ("&login=%B5%C7%A1%A1%C2%BC");
    12            ASCIIEncoding encoding = new ASCIIEncoding();
    13            byte[] data = encoding.GetBytes(postData);
    14            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://xxxx/xxxx/login.asp");
    15            request.Method = "Post";
    16            request.ContentType = "application/x-www-form-urlencoded";
    17            request.ContentLength = data.Length;
    18            request.KeepAlive = true;
    19            request.CookieContainer = container;  //返回的cookie会附加在这个容器里面
    20            //发送数据
    21            Stream newStream = request.GetRequestStream();
    22            newStream.Write(data, 0, data.Length);
    23            newStream.Close();
    24            //以下俩句不可缺少
    25            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    26            response.Cookies = container.GetCookies(request.RequestUri);
    27
    28            HttpWebRequest requestScore = (HttpWebRequest)WebRequest.Create("http://xxxx/xxxx/Score.asp");
    29            postData = "term=&TermList=%C7%EB%D1%A1%D4%F1&ckind=&lwPageSize=100&lwBtnquery=%B2%E9%D1%AF";
    30            data = encoding.GetBytes(postData);
    31            requestScore.Method = "Post";
    32            requestScore.ContentType = "application/x-www-form-urlencoded";
    33            requestScore.ContentLength = data.Length;
    34            requestScore.KeepAlive = true;
    35
    36            //使用登陆的cookies通过接下来的验证
    37            requestScore.CookieContainer = container;
    38            Stream stream = requestScore.GetRequestStream();
    39            stream.Write(data, 0, data.Length);
    40            stream.Close();
    41            HttpWebResponse responseSorce = (HttpWebResponse)requestScore.GetResponse();
    42            StreamReader reader = new StreamReader(responseSorce.GetResponseStream(), Encoding.Default);
    43            string content = reader.ReadToEnd();
    44            textBox1.Text = content;
    45
    46        }

        
    摘自红色黑客联盟(www.7747.net) 原文:http://www.7747.net/kf/201007/52330.html

  • 相关阅读:
    Shell编程进阶 1.2 shell结构及执行
    LNMP 1.6 常见的502问题解决
    关于贴图看不到。显示是白色或者其他。
    windows 任务栏图标宽度固定
    Install Oracle Java JDK/JRE 7u55 on Fedora 20/19, CentOS/RHEL 6.5/5.10
    盘点天龙历史:七年以来所有资料片
    linux shell 逻辑运算符、逻辑表达式详解
    vim 把满足条件的数字进行加上一些数字
    win7 一些快捷系统工具命令
    Linux下用C读取配置文件。类似ini这样。
  • 原文地址:https://www.cnblogs.com/hateyoucode/p/1916798.html
Copyright © 2011-2022 走看看