C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse
上次介绍了用WebClient的方式提交POST请求,这次,我继续来介绍用其它一种方式
HttpWebRequest以及HttpWebResponse
自认为与上次介绍的WebClient最大的不同之处在于HttpWebRequest更灵活,也更强大,比如,HttpWebRequest支持Cookie,而WebClient就不支持,因此,如果要登录某个网站才能进行某些操作的时候,HttpWebResponse就派上用场了。
补充:
WebClient是可以操作Cookie的,因为Cookie本质上就是个字符串,只要服务器返回的头是“SetCooie:xxx”,所以,按照返回的格式做下处理(不能原样返回,具体可以抓包分析下格式),存起来,然后在HTTP请求头上加上“Cookie:xxx”即可
首先要提下Referer还有Cookie
Referer:就是一般在浏览器中发送Http请求时带的头信息,被广泛用来统计点击信息,即从那个点击而来,所以有些网站也会用这个性质来防盗链,很多时候如果什么图片仅限内部交流之类的,就是用了这个原理。
Cookie:某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),通常大家登录的时候就要用到它,登录后,网站会储存一个Cookie的东西在本地计算机上,然后每次访问网站时,便会把这个网站的Cookie也一并发送过去,服务器就凭借这个来确认你的身份。它是个重要信息,有些黑客也会通过盗取Cookie的方式来侵入你的账户。
好了,现在开始具体说明:
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create("POST请求的地址");
- request.CookieContainer = new CookieContainer();
- CookieContainer cookie = request.CookieContainer;//如果用不到Cookie,删去即可
- //以下是发送的http头,随便加,其中referer挺重要的,有些网站会根据这个来反盗链
- request.Referer = “http://localhost/index.php”;
- request.Accept = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
- request.Headers["Accept-Language"] = "zh-CN,zh;q=0.";
- request.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";
- request.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1";
- request.KeepAlive = true;
- //上面的http头看情况而定,但是下面俩必须加
- request.ContentType = "application/x-www-form-urlencoded";
- request.Method = "POST";
- Encoding encoding = Encoding.UTF8;//根据网站的编码自定义
- byte[] postData = encoding.GetBytes(postDataStr);//postDataStr即为发送的数据,格式还是和上次说的一样
- request.ContentLength = postData.Length;
- Stream requestStream = request.GetRequestStream();
- requestStream.Write(postData, 0, postData.Length);
- HttpWebResponse response = (HttpWebResponse)request.GetResponse();
- Stream responseStream = response.GetResponseStream();
- //如果http头中接受gzip的话,这里就要判断是否为有压缩,有的话,直接解压缩即可
- if (response.Headers["Content-Encoding"] != null && response.Headers["Content-Encoding"].ToLower().Contains("gzip"))
- {
- responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
- }
- StreamReader streamReader = new StreamReader(responseStream, encoding);
- string retString = streamReader.ReadToEnd();
- streamReader.Close();
- responseStream.Close();
- return retString;
当然,请注意,我只是把知识与大家分享,不是让大家去做损害他人网站的事。
反过来,作为Web开发人员,也要明白,不能相信客户端发送来的数据总是合法的,也不能以为他人只能通过浏览器来访问网站,上面就是个例子
而作为防范,验证码之类的可以防范大部分人了~只是,也别以为有了验证码就能防住所有人了,欲知后事如何,请听下回分解~
C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse的更多相关文章
- C#模拟POST提交表单(一)--WebClient
C#的提交表单方式主要有两种WebClient与HttpWebRequest,这里先介绍一种 WebClient,转送门:http://msdn.microsoft.com/zh-cn/library ...
- js模拟支付宝提交表单
弄过支付宝的程序猿可能都知道,里面有非常多地方都用到了自提交表单的方式,支付宝的接口通过请求API的形式取得server返回的表单字符串,使用out.print("表单字符串")在 ...
- Java模拟post提交表单数据
package test; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOExcep ...
- 【HTTP】模拟form提交表单(转)
第一种:WebClient string postString = "arg1=a&arg2=b";//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是for ...
- php模拟post 提交表单
<?php header('Content-type: text/html;charset=UTF-8'); $action=$_REQUEST['action']; //获取验证码 if($a ...
- js模拟post提交表单
function post(URL, PARAMS) { var temp = document.createElement("form"); ...
- php 提交表单
滴答…滴答…的雨,欢迎大家光临我的博客. 学习是快乐的,教育是枯燥的. 博客园 首页 博问 闪存 联系 订阅 管理 随笔-58 评论-2017 文章-5 trackba ...
- 搭建简单Django服务并通过HttpRequester实现GET/POST http请求提交表单
调试Django框架写的服务时,需要模拟客户端发送POST请求,然而浏览器只能模拟简单的GET请求(将参数写在url内),网上搜索得到了HttpRequester这一firefox插件,完美的实现了模 ...
- .Net模拟提交表单
2016-09-0210:49:20 以中邮速递API为服务接口,由于提交方式为表单提交,我要获取返回值来处理其他业务,所以一开始尝试采用Js后台获取返回值,但是涉及到跨域请求限制问题,那边服务端接口 ...
随机推荐
- 14.6.1 InnoDB Startup Configuration 启动配置
14.6.1 InnoDB Startup Configuration 启动配置 首先描述关于InnoDB 配置设计数据库文件,日志文件,page size 和内存buffer 的配置. 推荐你定义数 ...
- squid透明代理+iptables防火墙,多网卡详细配置
squid透明代理+iptables防火墙详细配置 看到很多人都在不停地问iptables+squid做透明代理的问题,鄙人不才,斗胆在此做统一解答.如有任何纰漏还望各位批评指教. ========= ...
- 如何查看jar包的版本号?
jar包根目录里的META-INF目录下的MANIFEST.MF文件里一般有会记录版本信息,可以到这个文件里查看 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个 ...
- Android TextView setText内嵌html标签
由于得到的数据是保存在数据库里面的,不好对数据的某一部分进行操作.解决办法在数据库里面存数据的时候加上html的标签对, 如data = <中华人名共和国道路交通安全实施条例>第<u ...
- python中文乱码例子
#coding=utf-8 #---中文乱码--- #直接打印中文 print '千里之外取人首级,瞬息之间爆人菊花.' #中文前面加u,变成Unicode编码 print u'千里之外取人首级' # ...
- apply和call详解
1. apply和call的区别在哪里 2. 什么情况下用apply,什么情况下用call 3. apply的其他巧妙用法(一般在什么情况下可以使用apply ...
- PHP 小代码
//获取网上的一个文件function getUrlImage($url, $file = '', $maxExe = 0, $safe = false){ $urlExt = explode('.' ...
- 《Linear Algebra and Its Applications》-chaper6-正交性和最小二乘法-基本概念与定理
这一章节我们主要讨论定义在R^n空间上的向量之间的关系,而这个关系概括来讲其实就是正交,然后引入正交投影.最佳逼近定理等,这些概念将为我们在求无解的线性方程组Ax=b的最优近似解打下基石. 正交性: ...
- zoj 2734 Exchange Cards【dfs+剪枝】
Exchange Cards Time Limit: 2 Seconds Memory Limit: 65536 KB As a basketball fan, Mike is also f ...
- IOS 表视图UITableView 束NSBundle
今天搞了一下表视图UITableView 表视图是在以后应用程序开发中经常用到的一个视图,所以必须要熟练掌握 所获不多,对视图有了一个大概的了解 其中有用到NSBundle , 束 这个类 先说一 ...