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相关推荐

  1. c语言写自动填写表单提交,利用C语言实现POST数据包如此简单【模拟网页提交表单】...

    http://www.maben.com.cn/archives/212.html 利用C语言实现POST数据包如此简单[模拟网页提交表单] //*************************** ...

  2. 模拟form提交表单

    表单结构 模拟form提交表单,当点击按钮时执行form的submit()事件,表单的Name为接口所需参数名称,表单value为接口所需参数值 <!-- 模拟form表单提交 -->&l ...

  3. C#模拟POST提交表单(一)--WebClient

    C#的提交表单方式主要有两种WebClient与HttpWebRequest,这里先介绍一种 WebClient,转送门:http://msdn.microsoft.com/zh-cn/library ...

  4. js模拟支付宝提交表单

    弄过支付宝的程序员可能都知道,里面有很多地方都用到了自提交表单的方式,支付宝的接口通过请求API的形式取得服务器返回的表单字符串,使用out.print("表单字符串")在jsp页 ...

  5. C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse

    上次介绍了用WebClient的方式提交POST请求,这次,我继续来介绍用其它一种方式 HttpWebRequest以及HttpWebResponse 自认为与上次介绍的WebClient最大的不同之 ...

  6. Java模拟Post 提交表单数据

    测试模拟post提交类: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; ...

  7. 搭建简单Django服务并通过HttpRequester实现GET/POST http请求提交表单

    调试Django框架写的服务时,需要模拟客户端发送POST请求,然而浏览器只能模拟简单的GET请求(将参数写在url内),网上搜索得到了HttpRequester这一firefox插件,完美的实现了模 ...

  8. 【Python】忘记登录密码?遍历数字字母组合密码+模拟提交表单

    准备 忘记了密码?试一试暴力破解吧 打开F12,填写用户名.密码后,点击登录,看到请求头信息.提交的表单信息,例如下图: 也可以看到此次登录请求发送到的 url: 也可以看到此次请求返回的结果: 遍历 ...

  9. python自动登录并提交表单_用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)...

    老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用 ...

  10. tp5 ajax 路由,tp5中ajax方式提交表单

    用ajax提交表单,迅速,快捷,实现页面无刷新提交表单. ajax批删 姓名 年龄 地址 添加 $("#sub").click(function(){ var name = $(& ...

最新文章

  1. iBatis学习网站推荐
  2. CI中PHP写法规范(不断更新)
  3. echarts(一)下载引入,调色盘,[标题、图例组件、坐标轴]
  4. HTML5笔记——formData
  5. There is insufficient memory for the Java Runtime Environment to continue. NIFI 启动时报 jvm内存溢出
  6. Struts2学习第三课 Struts2详解
  7. 不一样的结果,不一样的人生
  8. 适合初学者 :用Google map street view api 实现批量下载谷歌地图街景 in python
  9. 【日常技巧】Rufus安装原版win10教程(全流程)
  10. [C]结构体数组初始化
  11. 台式计算机强制关机,台式机如何强制关机
  12. 板内板间通信协议及接口(六)RS232 RS485 RS422
  13. 红米K40 面具root教程
  14. mmdetection训练 显卡选择
  15. Vitas - star 歌词,拼音版
  16. 一个人瘦到什么程度身材才算好?其实身材好与体重关系不大
  17. 二叉树已知前序遍历、中序遍历画出二叉树的形状
  18. 自动驾驶职位选择和常见术语
  19. math_求和号@累乘号的性质(变界)@求和恒等式
  20. 将263邮箱导入到OUTLOOK

热门文章

  1. SylixOS 内存管理源代码分析--phyPage.c
  2. qt写的一个计算器程序
  3. 最短路 spfa算法
  4. pycharm怎样运行python_python – 如何使用PyCharm运行doctests?
  5. 3998. 变成1-AcWing题库
  6. 连续年份高精度人口密度分布数据
  7. 深度学习优化算法大全系列5:AdaDelta,RMSProp
  8. linux设备实现otg移动盘,Linux下通过OTG把板卡上的一个磁盘或文件映射成移动磁盘...
  9. 循环buffer的实现_Go并发编程-Channel的设计实现
  10. 为什么函数lamda显示权限不足_C++常用内置函数