这是我今天下午碰到的案例,一个退订页面的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, , 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);
}

HttpwebRequest - 带ViewState的网页POST请求的更多相关文章

  1. C#的HttpWebRequest编程,支持带ViewState的网页POST请求

    staticprivatestring SearchURL(string id) { try { //Get the ViewState and EventValidation HttpWebRequ ...

  2. 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

    通用辅助类  下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需 要获取认证信息(如Cookie),所以返回的是HttpWeb ...

  3. (转) 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

    转自:http://blog.csdn.net/zhoufoxcn/article/details/6404236 通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中 ...

  4. 【转】在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

    http://zhoufoxcn.blog.51cto.com/792419/561934 这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全 ...

  5. 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求【转载】

    标签:C# HTTPS HttpWebRequest HTTP HttpWebResponse 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...

  6. C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求 (转载)

    这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全部采用手工操作工作量大而且繁琐,因此周公决定利用C#来实现.在很多地方都需要验证用户身份才可 ...

  7. 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求(转)

    通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需要获取认证信息(如Cookie),所以返回的是HttpWebRe ...

  8. C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求

    C# HttpWebRequest GET HTTP HTTPS 请求  作者:周公(zhoufoxcn)    原文:http://blog.csdn.net/zhoufoxcn 这个需求来自于我最 ...

  9. 一篇文章带你了解网页框架——Vue简单入门

    一篇文章带你了解网页框架--Vue简单入门 这篇文章将会介绍我们前端入门级别的框架--Vue的简单使用 如果你以后想从事后端程序员,又想要稍微了解前端框架知识,那么这篇文章或许可以给你带来帮助 温馨提 ...

随机推荐

  1. 网络通信协议三之TCP/IP模型详解

    TCP/IP模型 注:PDU:Protocol Date Unit:表示对等层之间传递的数据单位 TCP:Transmission Control Protocol:传输控制协议 UDP:User D ...

  2. db2 cpu使用率高问题分析处理

    性能调优步骤 明确问题->收集数据->分析数据->细化.定位问题->优化 环境: db2 问题:%usr CPU高,大约99%,db2sysc进程使用的最多 收集数据 ---系 ...

  3. Eclipse中代码格式化配置

    一.配置formatter 从Eclipse主菜单选择“窗口→首选项”,进入“代码格式化程序”设置页.如下图所示: 确认选择的是格式化配置是Eclipse [built-in]. 注意:编写好代码后需 ...

  4. java小tip

    //20181128 ·javaJDK源码在c盘java安装目录里jdk文件夹src.zip压缩包里 ·HashCode()返回的数可能是负数 ·内部类的优点:可以方便调用所在类的方法 ·接口中定义常 ...

  5. Java元组Tuple介绍与使用

    一.元组介绍 仅仅一次方法调用就可以返回多个对象,你应该经常需要这样的功能吧.可以return语句只允许返回单个对(可能有人说返回一个集合就可以了,请记住,一个集合也只是一个对象而已)因此,解决办法就 ...

  6. mysql 事务队列 写入 幂等性 重复写入

    mysql  事务队列   写入 幂等性  重复写入

  7. [cloud][sdn] openstack openflow opendaylight openvswitch

    https://www.quora.com/What-is-the-relation-between-OpenStack-OpenDaylight-OpenFlow-and-Open-vSwitch- ...

  8. HBase 笔记

    参考资料:HBase权威指南 一行由若干列组成,若干列又构成一个列族一个列族的所有列存储在同一个底层的存储文件里,这个文件叫HFile列族的数量有限制:一个列族里列的数量没限制谓词删除:例如允许用户只 ...

  9. 《Redis 主从复制》

    万念俱灰,说的就是我现在的心情...... 周六下午写了一下午的读书笔记,由于我的 MAC 有点问题,重启了一下...... 灰飞烟灭...... 读 第八章<集群> 总结 1:如何开启主 ...

  10. Appium环境配置(一)

    一:环境准备(Windows 7版本 64位系统) 1.jdk1.6.0 (64位) 2.android-sdk 3.appium 4.Node.js:node-v8.11.1 5.Appium-Py ...