using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
namespace ConsoleApplication1
{
    class Program
    {
        private CookieContainer cookie = new CookieContainer();
        static void Main(string[] args)
        {
            Program a = new Program();
            string str = string.Empty;
            string url = "http://172.16.7.86";//学校内网,可以修改
            string userName =string.Empty;
            string pswd = string.Empty;
            str = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=dDwyMDY5NjM4MDg7dDw7bDxpPDE%2BOz47bDx0PDtsPGk8Mz47aTwxNT47PjtsPHQ8O2w8aTwxPjtpPDM%2BO2k8NT47aTw3PjtpPDk%2BO2k8MTE%2BO2k8MTM%2BO2k8MTU%2BO2k8MTc%2BOz47bDx0PHA8cDxsPEJhY2tJbWFnZVVybDs%2BO2w8aHR0cDovLzE3Mi4xNi43Ljg2Ly9pbWFnZXMvYmcuZ2lmOz4%2BOz47Oz47dDxwPHA8bDxCYWNrSW1hZ2VVcmw7PjtsPGh0dHA6Ly8xNzIuMTYuNy44Ni8vaW1hZ2VzL2JnMS5naWY7Pj47Pjs7Pjt0PHA8cDxsPEJhY2tJbWFnZVVybDs%2BO2w8aHR0cDovLzE3Mi4xNi43Ljg2Ly9pbWFnZXMvYmcxLmdpZjs%2BPjs%2BOzs%2BO3Q8cDxwPGw8QmFja0ltYWdlVXJsOz47bDxodHRwOi8vMTcyLjE2LjcuODYvL2ltYWdlcy9iZzEuZ2lmOz4%2BOz47Oz47dDxwPHA8bDxCYWNrSW1hZ2VVcmw7PjtsPGh0dHA6Ly8xNzIuMTYuNy44Ni8vaW1hZ2VzL2JnMS5naWY7Pj47Pjs7Pjt0PHA8cDxsPEJhY2tJbWFnZVVybDs%2BO2w8aHR0cDovLzE3Mi4xNi43Ljg2Ly9pbWFnZXMvYmcxLmdpZjs%2BPjs%2BOzs%2BO3Q8cDxwPGw8QmFja0ltYWdlVXJsOz47bDxodHRwOi8vMTcyLjE2LjcuODYvL2ltYWdlcy9iZzEuZ2lmOz4%2BOz47Oz47dDxwPHA8bDxCYWNrSW1hZ2VVcmw7PjtsPGh0dHA6Ly8xNzIuMTYuNy44Ni8vaW1hZ2VzL2JnMS5naWY7Pj47Pjs7Pjt0PHA8cDxsPEJhY2tJbWFnZVVybDs%2BO2w8aHR0cDovLzE3Mi4xNi43Ljg2Ly9pbWFnZXMvYmcxLmdpZjs%2BPjs%2BOzs%2BOz4%2BO3Q8dDw7dDxpPDM%2BO0A8LS3nlKjmiLfnsbvlnostLTvmlZnluIg75a2m55SfOz47QDwtLeeUqOaIt%2Bexu%2BWeiy0tO%2BaVmeW4iDvlrabnlJ87Pj47Pjs7Pjs%2BPjs%2BPjtsPEltZ19ETDs%2BPlIwqlnoTMFQ9azXMIyVE1Qc2S7g&Cbo_LX=%D1%A7%C9%FA&Txt_UserName="+userName+"&Txt_Password="+pswd+"&Img_DL.x=26&Img_DL.y=12";
            //通过封包查看实现,wireshark分析,当然比较复杂的网站比较难以分析
            string result=a.HttpPost(url,str);
           // Console.WriteLine(result);
            // -----------------下面为测试cookie,若使用有登陆记录的CookieCoantainer可以直接跳过登录步骤,否则不行,而且有了登录的cookie可以直接跳页,不用向浏览器那样一步步模拟

 
              HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://172.16.7.86//stdgl/cxxt/Web_Std_XQKB.aspx");
              request.CookieContainer = a.cookie;//若新建cookieContainer则没有登录信息new cookieCotainer()
               HttpWebResponse response = (HttpWebResponse)request.GetResponse();
               Stream myResponseStream = response.GetResponseStream();
               StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312"));//根据服务器的编码
               string retString = myStreamReader.ReadToEnd();
               myStreamReader.Close();
               myResponseStream.Close();
               Console.WriteLine(retString);
            
           //  -------------------------------
           
        }
        private string HttpPost(string Url, string postDataStr)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
            request.CookieContainer =cookie;
            Stream myRequestStream = request.GetRequestStream();
            StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
            myStreamWriter.Write(postDataStr);
            myStreamWriter.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            response.Cookies = cookie.GetCookies(response.ResponseUri);//与响应相关的cookie即客户端cookie中请求他的那条cookie
          /* 下面语句可用来测试,没有上面一句语句的话,response是没有cookie的
             foreach (Cookie cook in response.Cookies)
            {
                Console.WriteLine("Cookie:");
                Console.WriteLine("{0} = {1}", cook.Name, cook.Value);
                Console.WriteLine("Domain: {0}", cook.Domain);
                Console.WriteLine("Path: {0}", cook.Path);
                Console.WriteLine("Port: {0}", cook.Port);
                Console.WriteLine("Secure: {0}", cook.Secure);

                Console.WriteLine("When issued: {0}", cook.TimeStamp);
                Console.WriteLine("Expires: {0} (expired? {1})",
                    cook.Expires, cook.Expired);
                Console.WriteLine("Don't save: {0}", cook.Discard);
                Console.WriteLine("Comment: {0}", cook.Comment);
                Console.WriteLine("Uri for comments: {0}", cook.CommentUri);
                Console.WriteLine("Version: RFC {0}", cook.Version == 1 ? "2109" : "2965");

                // Show the string representation of the cookie.
                Console.WriteLine("String: {0}", cook.ToString());
            }
            */
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312"));//根据服务器的编码
            string retString = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();
            return retString;
        }
        public string HttpGet(string Url, string postDataStr)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
            request.Method = "GET";
            request.ContentType = "text/html;charset=UTF-8";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312"));
            string retString = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();

            return retString;
        }

   
    }
}
相关http数据包的结构,cookie等基本知识可以从博客园找相关文章。

 

posted on 2013-10-16 15:09  xiao_gg  阅读(1246)  评论(0)    收藏  举报