ASP.NET中Session和Cookie如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
由于种种原因,我们有时需要从互联网上抓取一些资料,有些页面可以直接打开,而有些页面必登录之后才能打开。本文介绍的是使用 HttpWebRequest 和 HttpWebResponse 自动填写提交 ASP.NET表单并保持Session和Cookie 的一个完整的例子。本文所有源代码:AutoPostWithCookies.rar
这里涉及到3个页面:MyLogin.aspx,LoginOK.htm,Default.aspx:
1)MyLogin.aspx 页面
2)LoginOK.htm 页面
3)Default.aspx 页面
提交ASP.NET表单(即完成自动登录)的代码如下:
try { CookieContainercookieContainer=newCookieContainer(); /////////////////////////////////////////////////// //1.打开MyLogin.aspx页面,获得VeiwState&EventValidation /////////////////////////////////////////////////// //设置打开页面的参数 stringURI="http://localhost:1165/WebTest/MyLogin.aspx"; HttpWebRequestrequest=WebRequest.Create(URI)asHttpWebRequest; request.Method="GET"; request.KeepAlive=false; //接收返回的页面 HttpWebResponseresponse=request.GetResponse()asHttpWebResponse; System.IO.StreamresponseStream=response.GetResponseStream(); System.IO.StreamReaderreader=newSystem.IO.StreamReader(responseStream,Encoding.UTF8); stringsrcString=reader.ReadToEnd(); //获取页面的VeiwState stringviewStateFlag="id=\"__VIEWSTATE\"value=\""; inti=srcString.IndexOf(viewStateFlag)+viewStateFlag.Length; intj=srcString.IndexOf("\"",i); stringviewState=srcString.Substring(i,j-i); //获取页面的EventValidation stringeventValidationFlag="id=\"__EVENTVALIDATION\"value=\""; i=srcString.IndexOf(eventValidationFlag)+eventValidationFlag.Length; j=srcString.IndexOf("\"",i); stringeventValidation=srcString.Substring(i,j-i); /////////////////////////////////////////////////// //2.自动填充并提交MyLogin.aspx页面 /////////////////////////////////////////////////// //提交按钮的文本 stringsubmitButton="登录"; //用户名和密码 stringuserName="1"; stringpassword="1"; //将文本转换成URL编码字符串 viewState=System.Web.HttpUtility.UrlEncode(viewState); eventValidation=System.Web.HttpUtility.UrlEncode(eventValidation); submitButton=System.Web.HttpUtility.UrlEncode(submitButton); //要提交的字符串数据。格式形如:user=uesr1&password=123 stringformatString= "userName={0}&password={1}&loginButton={2}&__VIEWSTATE={3}&__EVENTVALIDATION={4}"; stringstringpostString= string.Format(formatString,userName,password,submitButton,viewState,eventValidation); //将提交的字符串数据转换成字节数组 byte[]postData=Encoding.ASCII.GetBytes(postString); //设置提交的相关参数 request=WebRequest.Create(URI)asHttpWebRequest; request.Method="POST"; request.KeepAlive=false; request.ContentType="application/x-www-form-urlencoded"; request.CookieContainer=cookieContainer; request.ContentLength=postData.Length; //提交请求数据 System.IO.StreamoutputStream=request.GetRequestStream(); outputStream.Write(postData,0,postData.Length); outputStream.Close(); //接收返回的页面 response=request.GetResponse()asHttpWebResponse; responseresponseStream=response.GetResponseStream(); reader=newSystem.IO.StreamReader(responseStream,Encoding.GetEncoding("GB2312")); srcString=reader.ReadToEnd(); /////////////////////////////////////////////////// //3.打开Default.aspx页面 /////////////////////////////////////////////////// //设置打开页面的参数 URI="http://localhost:1165/WebTest/Default.aspx"; request=WebRequest.Create(URI)asHttpWebRequest; request.Method="GET"; request.KeepAlive=false; request.CookieContainer=cookieContainer; //接收返回的页面 response=request.GetResponse()asHttpWebResponse; responseresponseStream=response.GetResponseStream(); reader=newSystem.IO.StreamReader(responseStream,Encoding.UTF8); srcString=reader.ReadToEnd(); /////////////////////////////////////////////////// //4.分析返回的页面 /////////////////////////////////////////////////// // } catch(WebExceptionwe) { stringmsg=we.Message; }
说明:
1) 之所以能够保持 Session 和 Cookie 是因为使用了 Cookie 容器(CookieContainer),见红色的代码部分。
2) POST ASP.NET页面时,需要把 VeiwState 和 EventValidation 数据也一同 POST 过去。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。