Net中httpResponse和httpRequest的简单实用; - 咕

发布时间:2017-3-30 16:45:09 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Net中httpResponse和httpRequest的简单实用; - 咕",主要涉及到Net中httpResponse和httpRequest的简单实用; - 咕方面的内容,对于Net中httpResponse和httpRequest的简单实用; - 咕感兴趣的同学可以参考一下。

这对象很简单,封装很多常用的方法和属性;使用起来也很方便;

这个关键是要对我们的 http中的各种协议要很了解滴呀;

模拟一个简单的暴力破解:

  public static class HttpInfo    {        public static void Attack()        {            string url = "";            var request=(HttpWebRequest)WebRequest.Create(url);  //请求对象滴滴呀            var response = (HttpWebResponse)request.GetResponse(); //得到响应对象;            Stream stream = response.GetResponseStream();         //得到这个响应流滴呀;            StreamReader read = new StreamReader(stream);          //流转化;            string content = read.ReadToEnd();   //这样就得到我们的响应的文本信息了滴呀;        }        //然后这个就是我们的暴力破解的代码;        public static void VoilteFuck()        {                       string url = "http://localhost:3837/Login/index";            string pre = string.Empty;            for(int i = 0; i < 100; i++)            {                Console.WriteLine("破解进行中...");                Thread.Sleep(300);                var userName = new Random(DateTime.Now.Millisecond).Next(8,19).ToString();  //这里要添加一个我们的seed来提                var PassWord = new Random(DateTime.Now.Millisecond).Next(8,19).ToString();                var PostInfo = "UserName="+userName+ "&PassWord="+ PassWord;                var bytes = Encoding.UTF8.GetBytes(PostInfo);//将我们的额content变成字节的形式;                var request = (HttpWebRequest)WebRequest.Create(url);                //根据fidller中看到的信息,我们可以模拟追加这样的信息;                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 currentContext = sr.ReadToEnd();                if (string.IsNullOrEmpty(pre))                {                    pre = currentContext;                }else                {                    if (pre != currentContext) //这种判断是不太精确的,应为;mvc中有一个EnableBrowserLink,想page中插入随机js代码;所以,算了,这只是一个简单的模拟;                    {                        Console.WriteLine("第{0}次之后,破解成功,破解成功,破解成功,账户是:{1},密码是:{2}", i,userName, PassWord);                        break;                    }                    else                    {                        Console.WriteLine("第{0}次,账户是:{1},密码是:{2}", i, userName, PassWord);                    }                }            }            Console.WriteLine("尝试完毕!");        }    }}

 上面是向我们的service端不断的post提交东西,接下来我们尝试从service download一些信息;

  先尝试我们的额单线程模式

 //通过http,开启多个线程,来下载我们想要额基本东西滴呀;   public static class DownInfo    {        //这个是学习http的一个很好的实例滴呀;        //每个线程下载的字节数,方便我们最后的合并滴啊        public static ConcurrentDictionary<long, byte[]> dic = new ConcurrentDictionary<long, byte[]>();        // http://imgsrc.baidu.com/baike/pic/item/dc854fda6c02ee8db7fd4805.jpg        public static string ResourceUrl = "http://www.pncity.net/bbs/data/attachment/forum/201107/30/1901108yyd8gnrs2isadrr.jpg";        //启用单线程的方式来进行下载        public static void RunSingle()        {            Stopwatch watch = new Stopwatch();            watch.Start();            Console.Write("下载开始......");            if (GetHead() == 0)            {                return;            }            var request = (HttpWebRequest)HttpWebRequest.Create(ResourceUrl);            var response = (HttpWebResponse)request.GetResponse();            var stream = response.GetResponseStream();//得到我们额响应流滴呀            var MStream = new MemoryStream(); //这使用我们的内存流滴呀;            var bytes = new byte[10240];            int count = 0;            while((count=stream.Read(bytes,0,bytes.Length))!=0)            {                MStream.Write(bytes,0,count); //写入到我们的内存流中滴呀;            }            //然后存到我们的本地中;            var name = ResourceUrl.Substring(ResourceUrl.LastIndexOf('/') + 1);            var target = @"F:\\xiandao_person\\"+name;             FileStream fs = new FileStream(target,FileMode.Create,FileAccess.ReadWrite);//其他信息: 对路径“F:\xiandao_person”的访问被拒绝。(没有添加文件名导致的,就是我们的name滴呀;)            fs.Write(MStream.ToArray(),0,(int)MStream.Length);            MStream.Close();            response.Close();            watch.Stop();            Console.WriteLine("下载结束,单线程下载耗时:{0}",watch.Elapsed);            //好的,这下我们的图片下载就基本结束了,        }        //获取响应头的信息滴呀;        private static long GetHead()        {            var request = HttpWebRequest.Create(ResourceUrl);            request.Method = "Head";            request.Timeout = 3000;            var response =(HttpWebResponse)request.GetResponse();            var code = response.StatusCode;            if (code != HttpStatusCode.OK)            {                Console.WriteLine("下载资源无效!");                return 0;            }            var total = response.ContentLength;            Console.WriteLine("当前资源大小为:"+total);            response.Close();            return total;        }        //顺便复习一下常见流的操作滴呀;        private static void Read()        {            string url = @"";            FileStream fs = new FileStream(url,FileMode.Open,FileAccess.Read);            byte[] by = new byte[fs.Length];            fs.Read(by,0,(int)fs.Length);//将我们的数据读入我们的by字节数组中滴呀;        }        //文件的写入操作的啊;        private static void Write(string val)        {            byte[] buffer = Convert.FromBase64String(val);            string path = @"";            FileStream fs = new FileStream(path,FileMode.Create);            fs.Write(buffer,0,buffer.Length);            fs.Flush();            fs.Close();        }    }

 接下来就来尝试我们的多线程模式滴 ;

 //后面我们考虑,使用并发编程来进行下载的呀,同样提高效率滴呀;不,并发编更多的是用在本地计算中的;        //多线程来进行请求,然后拼接在一起,这个是一个很不错的实例和使用方式滴呀;,效果很不错

           public static CountdownEvent cde = new CountdownEvent(0);
           public static ConcurrentDictionary<long, byte[]> dic = new ConcurrentDictionary<long, byte[]>();
           public static string ResourceUrl = "http://www.pncity.net/bbs/data/attachment/forum/201107/30/1901108yyd8gnrs2isadrr.jpg"

        public static void RunMultiTask()        {            Stopwatch watch = Stopwatch.StartNew();            Console.Write("下载开始......");            int threadCount = 5;            long start = 0;            long end = 0;            var total = GetHead();            if (total == 0) { return; }            int pageSize = (int)Math.Ceiling((double)total / threadCount);//“每一页”的大小            cde.Reset(threadCount);            Task[] task = new Task[threadCount];            for(var i = 0; i < threadCount; i++)            {                start = i * pageSize;                end = (i + 1) * pageSize - 1;  //因为,小标是从0开始的,所以这里要减去一滴呀;                if (end > total)                    end = total;                var obj = start + "|" + end;                task[i] = Task.Factory.StartNew(j=> DownTaskMulti(obj),obj);            }            Task.WaitAll(task);            var name = ResourceUrl.Substring(ResourceUrl.LastIndexOf('/')+1);            var path = @"F:\\xiandao_person\\" + name;            FileStream fs = new FileStream(path,FileMode.Create,FileAccess.ReadWrite);            var result = dic.Keys.OrderBy(i=>i).ToList(); //保证顺序滴啊;            foreach(var item in result)            {                fs.Write(dic[item],0,dic[item].Length);  //写入到本地中;            }            fs.Close();            watch.Stop();            Console.WriteLine("下载结束,启动{0}个线程,耗时{1}", threadCount,watch.Elapsed);        }        /// <summary>        /// 多线程来进行请求,然后拼接在一起,这个是一个很不错的实例和使用方式滴呀;,效果很不错        /// </summary>        /// <param name="obj"></param>        private static void DownTaskMulti(object obj)        {            var single = obj.ToString().Split('|');            long start = Convert.ToInt64(single.FirstOrDefault());            long end = Convert.ToInt64(single.LastOrDefault());            var request = (HttpWebRequest)HttpWebRequest.Create(ResourceUrl);            request.AddRange(start, end); //每次仅仅请求获取制定位置的数据滴呀;,这样的效果还是挺不错滴呀;            //向请求添加指定范围的字节范围标头。            //            // 参数:            //   from:            //     开始发送数据的位置。            //            //   to:            //     停止发送数据的位置            var response = (HttpWebResponse)request.GetResponse();            var stream = response.GetResponseStream();            var ms = new MemoryStream();            var bytes = new byte[10240]; //每次取出这么多个字节            int count = 0;            while ((count=stream.Read(bytes,0,bytes.Length))!=0)            {                ms.Write(bytes,0,count); //写入我们的额内存流中;            }            ms.Close();            response.Close();            dic.TryAdd(start,ms.ToArray());            cde.Signal();        }

这里有个Task的使用和我们CountdownEvent 的使用滴呀;这个要注意复习和使用滴呀;

这里还要注意复习和了解我们http相关协议的各种知识滴呀;


上一篇:vmware里面的名词 vSphere、vCenter Server、ESXI、vSphere Client
下一篇:2016年总结

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款