HttpwebRequest - 带ViewState的网页POST请求
这是我今天下午碰到的案例,一个退订页面的post请求,请求头信息都很明确,but看看下面这个请求体,除了最后一个key是我的页面控件名称,其他的几个ViewState相关都是what呢?(ViewState原理参考http://www.cnblogs.com/wwan/archive/2010/11/18/1880357.html),下面是怎么处理这种情况的Post请求的办法。
1. 拿到接口地址,参数,拼串发送Get请求,拿到响应体(如下图,看高亮)
2. 从响应体里提取我们想要的ViewState相关,并保持在相应的字符串里面
3. 拼出来我们想要的请求体,对刚才的地址重新发送Post请求
亲测,可以解决问题。
请求头 Content-Type:Content-Type: application/x-www-form-urlencoded
public static string unsubResponse(string UnsubURL){try{// Get the ViewState and EventValidation HttpWebRequest request = WebRequest.Create(UnsubURL) as HttpWebRequest;request.Method = "GET";request.KeepAlive = false;// Get the response HttpWebResponse response = request.GetResponse() as HttpWebResponse;Stream responseStream = response.GetResponseStream();StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);string srcString = reader.ReadToEnd();//Get the __VIEWSTATE string viewStateFlag = "id=\"__VIEWSTATE\" value=\"";int i = srcString.IndexOf(viewStateFlag) + viewStateFlag.Length;int j = srcString.IndexOf("\"", i);string viewState = srcString.Substring(i, j - i);// Get the __VIEWSTATEGENERATOR string viewStateGeneratorFlag = "id=\"__VIEWSTATEGENERATOR\" value=\"";i = srcString.IndexOf(viewStateGeneratorFlag) + viewStateGeneratorFlag.Length;j = srcString.IndexOf("\"", i);string viewStateGenerator = srcString.Substring(i, j - i);// Get the __EVENTVALIDATION string EventValidationFlag = "id=\"__EVENTVALIDATION\" value=\"";i = srcString.IndexOf(EventValidationFlag) + EventValidationFlag.Length;j = srcString.IndexOf("\"", i);string eventValidation = srcString.Substring(i, j - i);// Compose the URL viewState = Uri.EscapeDataString(viewState);viewStateGenerator = Uri.EscapeDataString(viewStateGenerator);eventValidation = Uri.EscapeDataString(eventValidation);string unsubButton = Uri.EscapeDataString("Unsubscribe");string formatString = "__VIEWSTATE={0}&__VIEWSTATEGENERATOR={1}&__EVENTVALIDATION={2}&ButtonUnsubscribe={3}"; string postString = string.Format(formatString, viewState, viewStateGenerator, eventValidation, unsubButton);// Change to byte[] byte[] postData = Encoding.ASCII.GetBytes(postString);// Compose the new request request = WebRequest.Create(UnsubURL) as HttpWebRequest;request.Method = "POST";request.KeepAlive = false;request.ContentType = "application/x-www-form-urlencoded";request.ContentLength = postData.Length;Stream outputStream = request.GetRequestStream();outputStream.Write(postData, 0, postData.Length);outputStream.Close();// Get the new response response = request.GetResponse() as HttpWebResponse;responseStream = response.GetResponseStream();reader = new StreamReader(responseStream);srcString = reader.ReadToEnd();return (srcString);}catch (WebException we){Console.WriteLine("Communication error," + we.Message + " please check your connectivity and try again.", "Error");}catch{Console.WriteLine("Unknow error.", "Error");}return (null);}
转载于:https://www.cnblogs.com/AryaZ/p/7756104.html
HttpwebRequest - 带ViewState的网页POST请求相关推荐
- 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求
这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全部采用手工操作工作量大而且繁琐,因此周公决定利用C#来实现.在很多地方都需要验证用户身份才可 ...
- 一文带你学习跨站点请求伪造(CSRF)
一文带你学习跨站点请求伪造(CSRF) 1.何为CSRF 2.浏览器的Cookie策略 3.P3P头的副作用 4.CSRF攻击流程 5.CSRF的分类 GET型 POST-表单型 POST-JSON型 ...
- 带中文的网页下载为PDF格式的文件(jsPDF)
1.调研 主要需要用到插件jsPDF,jsPDF可以将html下载为pdf格式的文件,但无法支持中文字形,下载带中文的网页会有乱码,经验证可以通过如下3种方案下载中文网页. 2.方案 2.1.方案一( ...
- php中的网页漂浮代码,JavaScript_Javascript实现带关闭按钮的网页漂浮广告代码,复制代码 代码如下: html - phpStudy...
Javascript实现带关闭按钮的网页漂浮广告代码 带关闭按钮的网页漂浮广告代码 X ff.js代码 var xPos = 20; var yPos = document.body.clientHe ...
- android安装自动打开网页,Android调用系统自带浏览器打开网页的实现方法
Android调用系统自带浏览器打开网页的实现方法 在Android中可以调用自带的浏览器,或者指定一个浏览器来打开一个链接.只需要传入一个uri,可以是链接地址. 启动android默认浏览器 在A ...
- WiFi-ESP8266入门http(3-4)网页一键配网(1若为普通wifi直连 2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信...
网页一键配网(1若为普通wifi直连 2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信 工程连接:https://github.com/Dongvdong/ESP8266_H ...
- 个人HTML期末大作业~ 个人网页(HTML+CSS)6页面带下拉特效~简单带表格带设计说明 ~学生网页设计作业源码
HTML期末大作业~ 个人网页6页面带下拉特效~简单带表格带设计说明 ~学生网页设计作业源码 作品介绍 下面介绍一下我的个人小网站吧,我的网站背景稍微单调一点白色,主要个人比较喜欢白色了,布局上面使用 ...
- HTML网页设计期末课程大作业 :汽车网页——宝马轿车 6页 带背景音乐 学生网页设计作业HTML+CSS+JavaScript学生网页课程设计期末作业下载
HTML网页设计期末课程大作业 :汽车网页--宝马轿车 6页 带背景音乐 学生网页设计作业HTML+CSS+JavaScript学生网页课程设计期末作业下载 临近期末, 你还在为HTML网页设计结课作 ...
- 一个网页浏览请求的数据通信过程(数通基础学习笔记)
数据通信网络的基本功能:实现不同节点之间的数据互通 如上图,我们在计算机上发送一个http的网页浏览请求到目标服务器,会有以下过程: 1.计算器携带http应用数据通过应用层进入到传输层,通过tcp协 ...
最新文章
- 骗子防不胜防,我们该如何安全上网?
- 新建 存储过程时报错
- 全面剖析 C++ Boost 智能指针! | CSDN 博文精选
- P1268 树的重量
- 入门笔记 Day two
- 黑马程序员Java零基础视频教程(2022最新Java)B站视频学习笔记-Day8-面向对象
- Activemq 下载地址
- [运算放大器系列]二、电压转4 - 20MA电流电路分析
- IOS 从项目学习Swift 开发(一)
- Python基础笔记
- win7 计算器 android,强大的Win7计算器
- matlab生成word文档
- 分数的大小比较优秀教案_分数的大小比较 教学设计
- 【企业安全实战】开源HIDS OSSEC部署与扩展使用
- 四大运营商频段最新划分情况
- (云服务器+JQuery+JS+BootStrap+Navicat+AJAX+JavaScript)第一个前端小项目【面试】
- 8月教材有变,如何应对PMP考试
- 2022 团体程序设计天梯赛 模拟赛 L2-1 盲盒包装流水线 (25 分)
- OpenGL显示窗口重定形函数
- 初学者必看!3D建模要学什么软件?
热门文章
- memcached linux 配置文件,Linux下Memcached服务器部署 | 系统运维
- 神经网络技巧篇之寻找最优超参数
- SQLSERVER日期时间汇总
- 解决Visual Studio 2008 下,打开.dbml(LINQ) 文件时,提示The operation could not be completed. 的问题。...
- PYPL 11 月的 IDE 指数榜单
- ubuntu14.04中离线安装docker
- python面向对象编程(2)
- python操作mysql,增,删,改,查
- 读《python核心编程2》笔记 1
- (转)Membership、MembershipUser和Roles类 详解