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

这个关键是要对我们的 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 = ; i < ; i++)
{
Console.WriteLine("破解进行中...");
Thread.Sleep(); var userName = new Random(DateTime.Now.Millisecond).Next(,).ToString(); //这里要添加一个我们的seed来提
var PassWord = new Random(DateTime.Now.Millisecond).Next(,).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 = * ;
request.AllowAutoRedirect = true;
request.ContentLength = bytes.Length;
request.ContentType = "application/x-www-form-urlencoded"; //将我们的content写入post请求;
var stream = request.GetRequestStream();
stream.Write(bytes,,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() == )
{
return;
}
var request = (HttpWebRequest)HttpWebRequest.Create(ResourceUrl); var response = (HttpWebResponse)request.GetResponse(); var stream = response.GetResponseStream();//得到我们额响应流滴呀 var MStream = new MemoryStream(); //这使用我们的内存流滴呀; var bytes = new byte[]; int count = ; while((count=stream.Read(bytes,,bytes.Length))!=)
{
MStream.Write(bytes,,count); //写入到我们的内存流中滴呀;
} //然后存到我们的本地中;
var name = ResourceUrl.Substring(ResourceUrl.LastIndexOf('/') + );
var target = @"F:\\xiandao_person\\"+name;
FileStream fs = new FileStream(target,FileMode.Create,FileAccess.ReadWrite);//其他信息: 对路径“F:\xiandao_person”的访问被拒绝。(没有添加文件名导致的,就是我们的name滴呀;)
fs.Write(MStream.ToArray(),,(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 = ; var response =(HttpWebResponse)request.GetResponse();
var code = response.StatusCode;
if (code != HttpStatusCode.OK)
{
Console.WriteLine("下载资源无效!");
return ;
}
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,,(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,,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 = ;
long start = ;
long end = ;
var total = GetHead();
if (total == ) { return; } int pageSize = (int)Math.Ceiling((double)total / threadCount);//“每一页”的大小
cde.Reset(threadCount);
Task[] task = new Task[threadCount]; for(var i = ; i < threadCount; i++)
{
start = i * pageSize;
end = (i + ) * pageSize - ; //因为,小标是从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('/')+);
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],,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[]; //每次取出这么多个字节
int count = ;
while ((count=stream.Read(bytes,,bytes.Length))!=)
{
ms.Write(bytes,,count); //写入我们的额内存流中;
}
ms.Close();
response.Close();
dic.TryAdd(start,ms.ToArray());
cde.Signal(); }

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

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

Net中httpResponse和httpRequest的简单实用;的更多相关文章

  1. Java中的Math类的简单实用

    System.out.println(Math.PI);//获取PI的值 System.out.println(Math.E);//常量E int min = Math.min(5, 4);//求最小 ...

  2. ci中简单实用的权限管理

    实用的权限管理 对多数网站来说,使用完整的rbac权限管理杀鸡用牛刀绝对的吃力不讨好,因为我们只是简单分角色然后对角色进行管理行使其相对于的角色赋予的权限; 在实际的开发中用位运算来对权限进行验证是十 ...

  3. 最简单实用的JQuery实现banner图中的text打字动画效果!!!

    下面,就让小博详细介绍如何实现上面GIF实现的banner图中的文字动画效果,最简单实用的方法(鉴于代码量较小,就内嵌在一个HTML文件中了): 首先,我们要在header导入一个jQuery,并新建 ...

  4. C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点

    C#反射实现   一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...

  5. jQuery的几种简单实用效果

    许久未分享博客,或许已生疏. 闲来无事, 分享几个jQuery简单实用的效果案例 不喜勿喷... 1.页面常用的返回顶部 <!DOCTYPE html> <html lang=&qu ...

  6. 经验分享:10个简单实用的 jQuery 代码片段

    尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...

  7. 简单实用的PHP防注入类实例

    这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下   本文实例讲述了简单实用的PHP防注 ...

  8. php简单实用的操作文件工具类(创建、移动、复制、删除)

    php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) {  // 原目录,复制到的目录 $dir = opend ...

  9. 简单实用的Windows命令(一)

    前几天新买了一台笔记本电脑,使用了一下几个简单的查看电脑配置的命令,觉得非常的不错,在此记录一下 一:运行命令的方式有两种 1:使用快捷键WIN+R,然后在弹出的“运行”对话框中输入对应的命令 2:在 ...

随机推荐

  1. Tensorflow二分类处理dense或者sparse(文本分类)的输入数据

    这里做了一些小的修改,感谢谷歌rd的帮助,使得能够统一处理dense的数据,或者类似文本分类这样sparse的输入数据.后续会做进一步学习优化,比如如何多线程处理. 具体如何处理sparse 主要是使 ...

  2. 基于类的命令行notebook的实现

    在看一本书<PYTHON3 面向对象编程> 内容丰富,作作记录. notebook.py __author__ = 'chengang882' import datetime # Stor ...

  3. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(四):开源的Silverlight运行容器的编译、配置

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  4. Winform实现用多线程、百度地图API解析某公司的物理地址

    前言 作为一个很挫的C#新手总喜欢自己写点儿不着边际的东西,本人是个新手加菜鸟,写B/S的,工作中,任务完成了,空闲下来,总想继续学点儿什么,由此触发了本篇文章了.个人一直认为,.NET中,C/S所要 ...

  5. Linux环境下Nginx配置安装PHP

    下边的安装配置方法,我试了一晚上没有成功,可能因为我的系统环境比较复杂,所以建议: 先安装PHP.使用yum命令安装,在安装配置MySQL,具体做法看博客中其他文章,至于Nginx服务器可以安装完这两 ...

  6. MySQL 存储过程游标

    一.创建游标 游标用declare语句创建.如下面的例子所示: create procedure test2() begin declare cursorTest cursor for select ...

  7. 【BZOJ】3427: Poi2013 Bytecomputer

    题意: 给定一个长度为\(n\)的\(\{-1, 0, 1\}\)组成的序列,你可以进行\(x_i=x_i+x_{i-1}\)这样的操作,求最少操作次数使其变成不降序列.(\(n \le 100000 ...

  8. Kinect的那些事儿

    Kinect结合Unity3d跑酷游戏体感Demo 今天收拾东西,在柜子的翻出了一台崭新的Kinect,说起来真是惭愧,大学毕业那会儿,慈老师(和名字一位慈祥的好老师,也是我的毕业设计指导老师)赞 助 ...

  9. iOS常用技术

    1.判断系统 #define UMSYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersi ...

  10. Ubuntu14.04安装微软雅黑字体

    1.首先获得一套“微软雅黑”字体库(自行百度),包含两个文件msyh.ttf(普通)、msyhbd.ttf(加粗);2.在/usr/share/fonts目录下建立一个子目录,例如win,命令如下:  ...