C#模拟GetPOST提交表单(一)--HttpWebRequest以及HttpWebResponse --WebClient,restsharp
C#的提交表单方式主要有两种WebClient与HttpWebRequest,restsharp
WebClient最大的不同之处在于HttpWebRequest更灵活,也更强大,比如,HttpWebRequest支持Cookie,而WebClient就不支持,因此,如果要登录某个网站才能进行某些操作的时候,HttpWebResponse就派上用场了。
WebClient是可以操作Cookie的,因为Cookie本质上就是个字符串,只要服务器返回的头是“SetCooie:xxx”,所以,按照返回的格式做下处理(不能原样返回,具体可以抓包分析下格式),存起来,然后在HTTP请求头上加上“Cookie:xxx”即可
首先要提下Referer还有Cookie
Referer:就是一般在浏览器中发送Http请求时带的头信息,被广泛用来统计点击信息,即从那个点击而来,所以有些网站也会用这个性质来防盗链,很多时候如果什么图片仅限内部交流之类的,就是用了这个原理。
Cookie:某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),通常大家登录的时候就要用到它,登录后,网站会储存一个Cookie的东西在本地计算机上,然后每次访问网站时,便会把这个网站的Cookie也一并发送过去,服务器就凭借这个来确认你的身份。它是个重要信息,有些黑客也会通过盗取Cookie的方式来侵入你的账户。
webClient(get)
//第一种
//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form里面每一个name都要加进来 using (WebClient webClient = new WebClient()){
string url="http://localhost:21021/Test/GetUpdateLog?Version=" + _Version;//Console.WriteLine("Sending an HTTP GET request to " + url);byte[] bResponse = webClient.DownloadData(url);string strResponse = Encoding.UTF8.GetString(bResponse); return strResponse;//直接返回结果 返回后再去序列化//var aaaa= JsonConvert.DeserializeObject<dynamic>(jsondata);}//第二种
string uri = "http://localhost:21021/Test/GetUpdateLog?Version=" + _Version;
WebClient wc = new WebClient();
Console.WriteLine("Sending an HTTP GET request to " + uri);
Stream st = wc.OpenRead(uri);
StreamReader sr = new StreamReader(st);
string res = sr.ReadToEnd();
sr.Close();
st.Close();
Console.WriteLine("HTTP Response is ");
Console.WriteLine(res);
后台接收
[HttpGet]public ActionResult GetUpdateLog(string Version){//逻辑代码return Json(new { ok = false, msg = "null", data = "返回的实体" });}
webClient (post)
//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form里面每一个name都要加进来
string postString = "arg1=a&arg2=b";//也可以传json 比如datatable转成json,服务端接收时用list<model>
byte[] postData = Encoding.UTF8.GetBytes(postString);//编码,尤其是汉字,事先要看下抓取网页的编码方式
string url = "http://localhost/register.php";//地址
using (WebClient webClient = new WebClient()){webClient.Headers.Add("Content-Type", "application/json;charset=utf-8");//采取POST方式必须加的header,如果改为GET方式的话就去掉这句话即可byte[] responseData = webClient.UploadData(url, "POST", postData);//得到返回字符流string srcString = Encoding.UTF8.GetString(responseData);//解码 var DynamicObject = JsonConvert.DeserializeObject<dynamic>(srcString);string aa = DynamicObject.result;//返回的结果中的项 //List<dynamic> model = JsonConvert.DeserializeObject<List<dynamic>>(aa);将json反序列化return aa;}
后台接收
[HttpPost]public string YLBSynchronous(List<YLBModel> YLB){//Model是一个实体类return xqgmd=YLB[0].HDL_C;}
传文件
try{var fileName = System.IO.Path.GetFileName(filePath);var client = new RestClient("http://127.0.0.1/api/uploadfile");var request = new RestRequest(Method.POST);request.AlwaysMultipartFormData = true;request.AddHeader("Content-Type", "multipart/form-data");request.AddFile("file", filePath);request.AddParameter("multipart/form-data", fileName, ParameterType.RequestBody);var response = client.Execute(request);return response.StatusCode == System.Net.HttpStatusCode.OK;}catch{return false;}
HttpWebRequest 发送数据接受数据跟WebClient一样
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;
restsharp
第三种方式详见我另一篇文章
winform通过restsharp调用api接口登录及其它接口_香煎三文鱼的博客-CSDN博客_restsharp 登录
C#模拟GetPOST提交表单(一)--HttpWebRequest以及HttpWebResponse --WebClient,restsharp相关推荐
- c语言写自动填写表单提交,利用C语言实现POST数据包如此简单【模拟网页提交表单】...
http://www.maben.com.cn/archives/212.html 利用C语言实现POST数据包如此简单[模拟网页提交表单] //*************************** ...
- 模拟form提交表单
表单结构 模拟form提交表单,当点击按钮时执行form的submit()事件,表单的Name为接口所需参数名称,表单value为接口所需参数值 <!-- 模拟form表单提交 -->&l ...
- C#模拟POST提交表单(一)--WebClient
C#的提交表单方式主要有两种WebClient与HttpWebRequest,这里先介绍一种 WebClient,转送门:http://msdn.microsoft.com/zh-cn/library ...
- js模拟支付宝提交表单
弄过支付宝的程序员可能都知道,里面有很多地方都用到了自提交表单的方式,支付宝的接口通过请求API的形式取得服务器返回的表单字符串,使用out.print("表单字符串")在jsp页 ...
- C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse
上次介绍了用WebClient的方式提交POST请求,这次,我继续来介绍用其它一种方式 HttpWebRequest以及HttpWebResponse 自认为与上次介绍的WebClient最大的不同之 ...
- Java模拟Post 提交表单数据
测试模拟post提交类: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; ...
- 搭建简单Django服务并通过HttpRequester实现GET/POST http请求提交表单
调试Django框架写的服务时,需要模拟客户端发送POST请求,然而浏览器只能模拟简单的GET请求(将参数写在url内),网上搜索得到了HttpRequester这一firefox插件,完美的实现了模 ...
- 【Python】忘记登录密码?遍历数字字母组合密码+模拟提交表单
准备 忘记了密码?试一试暴力破解吧 打开F12,填写用户名.密码后,点击登录,看到请求头信息.提交的表单信息,例如下图: 也可以看到此次登录请求发送到的 url: 也可以看到此次请求返回的结果: 遍历 ...
- python自动登录并提交表单_用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)...
老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用 ...
- tp5 ajax 路由,tp5中ajax方式提交表单
用ajax提交表单,迅速,快捷,实现页面无刷新提交表单. ajax批删 姓名 年龄 地址 添加 $("#sub").click(function(){ var name = $(& ...
最新文章
- iBatis学习网站推荐
- CI中PHP写法规范(不断更新)
- echarts(一)下载引入,调色盘,[标题、图例组件、坐标轴]
- HTML5笔记——formData
- There is insufficient memory for the Java Runtime Environment to continue. NIFI 启动时报 jvm内存溢出
- Struts2学习第三课 Struts2详解
- 不一样的结果,不一样的人生
- 适合初学者 :用Google map street view api 实现批量下载谷歌地图街景 in python
- 【日常技巧】Rufus安装原版win10教程(全流程)
- [C]结构体数组初始化
- 台式计算机强制关机,台式机如何强制关机
- 板内板间通信协议及接口(六)RS232 RS485 RS422
- 红米K40 面具root教程
- mmdetection训练 显卡选择
- Vitas - star 歌词,拼音版
- 一个人瘦到什么程度身材才算好?其实身材好与体重关系不大
- 二叉树已知前序遍历、中序遍历画出二叉树的形状
- 自动驾驶职位选择和常见术语
- math_求和号@累乘号的性质(变界)@求和恒等式
- 将263邮箱导入到OUTLOOK
热门文章
- SylixOS 内存管理源代码分析--phyPage.c
- qt写的一个计算器程序
- 最短路 spfa算法
- pycharm怎样运行python_python – 如何使用PyCharm运行doctests?
- 3998. 变成1-AcWing题库
- 连续年份高精度人口密度分布数据
- 深度学习优化算法大全系列5:AdaDelta,RMSProp
- linux设备实现otg移动盘,Linux下通过OTG把板卡上的一个磁盘或文件映射成移动磁盘...
- 循环buffer的实现_Go并发编程-Channel的设计实现
- 为什么函数lamda显示权限不足_C++常用内置函数