[保存]C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
这里涉及到3个页面:MyLogin.aspx,LoginOK.htm,Default.aspx:
1)MyLogin.aspx 页面
2)LoginOK.htm 页面
3)Default.aspx 页面
提交ASP.NET表单(即完成自动登录)的代码如下:
try
{
CookieContainer cookieContainer = new CookieContainer();
///
// 1. 打开 MyLogin.aspx 页面,获得 GetVeiwState & EventValidation
///
// 设置打开页面的参数
string URI = "http://localhost:1165/WebTest/MyLogin.aspx";
HttpWebRequest request = WebRequest.Create(URI) as HttpWebRequest;
request.Method = "GET";
request.KeepAlive = false;
// 接收返回的页面
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
System.IO.Stream responseStream = response.GetResponseStream();
System.IO.StreamReader reader = new System.IO.StreamReader(responseStream,Encoding.UTF8);
string srcString = reader.ReadToEnd();
// 获取页面的 VeiwState
string viewStateFlag = "id=\"__VIEWSTATE\" value=\"";
int i = srcString.IndexOf(viewStateFlag) + viewStateFlag.Length;
int j = srcString.IndexOf("\"", i);
string viewState = srcString.Substring(i, j - i);
// 获取页面的 EventValidation
string eventValidationFlag = "id=\"__EVENTVALIDATION\" value=\"";
i = srcString.IndexOf(eventValidationFlag) + eventValidationFlag.Length;
j = srcString.IndexOf("\"", i);
string eventValidation = srcString.Substring(i, j - i);
// 2. 自动填充并提交 MyLogin.aspx 页面
///
// 提交按钮的文本
string submitButton = "登录";
string userName = "1";
string password = "1";
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
submitButton = System.Web.HttpUtility.UrlEncode(submitButton);
string formatString =
"userName={0}&password={1}&loginButton={2}&__VIEWSTATE={3}&__EVENTVALIDATION={4}";
string postString =
string.Format(formatString, userName, password, submitButton, viewState, eventValidation);
byte[] postData = Encoding.ASCII.GetBytes(postString);
request = WebRequest.Create(URI) as HttpWebRequest;
request.Method = "POST";
request.KeepAlive = false;
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = cookieContainer;
request.ContentLength = postData.Length;
System.IO.Stream outputStream = request.GetRequestStream();
outputStream.Write(postData, 0, postData.Length);
outputStream.Close();
response = request.GetResponse() as HttpWebResponse;
responseStream = response.GetResponseStream();
reader = new System.IO.StreamReader(responseStream,Encoding.GetEncoding("GB2312"));
srcString = reader.ReadToEnd();
foreach (Cookie cookie in response.Cookies)
cookieContainer.Add(cookie);
// 3. 打开 Default.aspx 页面
///
// 设置打开页面的参数
URI = "http://localhost:1165/WebTest/Default.aspx";
request = WebRequest.Create(URI) as HttpWebRequest;
request.Method = "GET";
request.KeepAlive = false;
request.CookieContainer = cookieContainer;
response = request.GetResponse() as HttpWebResponse;
responseStream = response.GetResponseStream();
reader = new System.IO.StreamReader(responseStream, Encoding.UTF8);
srcString = reader.ReadToEnd();
// 4. 分析返回的页面
///
//
}
catch (WebException we)
{
string msg = we.Message;
}
之所以能够保持 Session 和 Cookie 是因为使用了 Cookie 容器(CookieContainer),见红色的代码部分。
本文所有源代码:http://files.cnblogs.com/gotolnc/AutoPostWithCookies.rar
转载于:https://www.cnblogs.com/gotolnc/archive/2009/07/31/1536226.html
[保存]C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie相关推荐
- C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
由于种种原因,我们有时需要从互联网上抓取一些资料,有些页面可以直接打开,而有些页面必登录之后才能打开.本文介绍的是使用 HttpWebRequest 和 HttpWebResponse 自动填写提交 ...
- 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- ajax提交,form表单提交,onsubmit=return checksubmit()提交验证
Ajax提交的两种方式: 一是url参数提交数据, 二是form提交(和平常一样在后台可以获取到Form表单的值).在所要提交的表单中,如果元素很多的话建议用第二种方式进行提交 一.Url参数提交数据 ...
- php 返回页面重复提交,php防止表单重复提交
后端防止重复提交的基本原理: 服务器返回表单页面时,会先生成一个subToken保存于session,并把该subToen传给表单页面.当表单提交时会带上subToken,服务器获取表单信息判断ses ...
- java表单重复提交_JavaWeb防止表单重复提交(转载)
转载自:http://blog.csdn.net/ye1992/article/details/42873219 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用 ...
- Form 表单提交 和 Ajax 表单提交 的一些区别
自己一些心得体会: 1:form 表单提交后进行后台处理程序,没有直接返回值,只能进行后台处理,Form标签里的所有数据全部提交到后台 ajax 表单提交,是可以局部提交,具有ajax的所有属性... ...
- python表单防重复提交_防止表单重复提交的几种策略
表单重复提交是在多用户Web应用中最常见.带来很多麻烦的一个问题.有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次. 点击刷新按钮. 使用浏览器后退按钮重复之前的操作,导致重复提交表单. ...
- php提交后清楚表单缓存,PHP提交表单后如何控制缓存 | 学步园
在开发过程中,经常会出现表单出错而返回页面的时候填写的信息全部丢失的情况,为了支持页面回跳,可以通过以下两种方法实现. 1.使用header头设置缓存控制头Cache-control. PHP代码 h ...
- oracle无法减小列长度,中国港湾扩展表单分配时调整字段后保存时报错,无法正常维护表单定义...
版本号: 7.0.4 业务场景(如下):中国港湾扩展表单分配时调整字段后保存时报错,无法正常维护表单定义 异常提示: 异常信息:添加业务实体的时候出错. 导致错误的应用程序或对象的名称:Generso ...
最新文章
- hibernate主配置文件中指定session与当前线程绑定
- 13.MATLAB的while、for、break、continue循环操作
- Acwing第 9 场周赛【未完结】
- .Net开发人员应该下载的十种必备工具(二)
- java操作redis的操作_Java操作redis简单示例
- java 优化线程_Java | 多线程调优(下):如何优化多线程上下文切换?
- java 对象赋值给scala_将Scala变量转换为Java对象… varargs
- 关于opencv的cv2.WINDOW_一类
- Android ActivityManager类
- 【Matlab】函数uigetfile的使用
- 毕业论文/分页符/段前2行没用
- CentOS — 文本编辑器
- vscode 脑图插件mindmap
- VisionPro使用C#编写脚本
- 2022-10-25 系统app提示Signature mismatch for shared user: SharedUserSetting,开机后无法安装
- ISP 图像信号处理器数字IP实现
- LeetCode 5. Longest Palindromic Substring 最长回文子串 Python 四种解法(Manacher 动态规划)
- 【解答】多台西门子PLC之间可不可以无线通讯
- 股份制银行的薪资对比
- 第十二篇:从生稣出熟稣,从熟稣出醍醐-再读内核驱动设计目标
热门文章
- 中国公司又称雄国际AI大赛,IARPA人脸识别挑战赛依图夺冠
- Ubuntus安装vmware tools工具
- 打造SpringBootTemplate(SpringBoot项目的模版)
- POJ 3111 K Best 贪心 二分
- 你从 Kotlin 中 get 了多少技能了?
- “隐私经济”有未来吗?
- Elasticsearch 嵌套类型nested
- uva-10341-二分法
- Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)
- MVC利用Routing实现多域名绑定一个站点、二级域名以及二级域名注册Area