C#HttpWebRequest网站登录我正在尝试从Web浏览器控制切换到http请求以自动执行任务以提高速度。使用此功能,我可以发布数据并接收登录页面,但不会返回任何cookie并将其添加到cookie列表中,因此登录会话不会传递给下一个请求。//调用示例test("http://websitename.com/loginpage.php","username=foo&password=123456");私有字符串测试(字符串url,字符串数据){字符串responseFromServer;字节[]字节数组;流数据流;HttpWebRequest请求;HttpWebResponse响应;StreamReader阅读器;responseFromServer=string.Empty;尝试{request=WebRequest.Create(url)asHttpWebRequest;request.Method="POST";请求.KeepAlive=真;request.ContentType="application/x-www-form-urlencoded";byteArray=Encoding.UTF8.GetBytes(数据);request.ContentLength=byteArray.Length;request.CookieContainer=newCookieContainer();foreach(Cookieaincookies)request.CookieContainer.Add(a);dataStream=request.GetRequestStream();dataStream.Write(byteArray,0,byteArray.Length);数据流.关闭();响应=request.GetResponse()作为HttpWebResponse;foreach(响应中的Cookiea.Cookies)cookies.Add(a);dataStream=response.GetResponseStream();读者=新流读者(数据流);responseFromServer=reader.ReadToEnd();读者。关闭();数据流.关闭();响应.关闭();}catch(Exceptionx){x.ToString();}返回responseFromServer;这是最终答案:stringurl="http://www.ABC/MemberShip/Login.aspx";//HttpContext.Current.Request.Url.AbsoluteUri.ToString().Replace("自动登录","登录");CookieContainermyCookieContainer=newCookieContainer();HttpWebRequestrequest=WebRequest.Create(url)asHttpWebRequest;request.CookieContainer=myCookieContainer;request.Method="GET";请求.KeepAlive=false;HttpWebResponseresponse=request.GetResponse()asHttpWebResponse;System.IO.StreamresponseStream=response.GetResponseStream();System.IO.StreamReaderreader=newSystem.IO.StreamReader(responseStream,Encoding.UTF8);字符串srcString=reader.ReadToEnd();//获取页面ViewStatestringviewStateFlag="id="__VIEWSTATE"value="";inti=srcString.IndexOf(viewStateFlag)+viewStateFlag.Length;intj=srcString.IndexOf(""",i);stringviewState=srcString.Substring(i,j-i);//获取页面EventValidationstringeventValidationFlag="id="__EVENTVALIDATION"value="";i=srcString.IndexOf(eventValidationFlag)+eventValidationFlag.Length;j=srcString.IndexOf(""",i);stringeventValidation=srcString.Substring(i,j-i);stringsubmitButton="LoginButton";//用户名和密码stringuserName="userid";stringpassword="password";//将文本转为url编码字符串);//连接要提交的字符串数据stringformatString="txtUserName={0}&txtPassword={1}&btnSignIn={2}&__VIEWSTATE={3}&__EVENTVALIDATION={4}";stringpostString=string.Format(格式字符串,用户名,密码,提交按钮、视图状态、事件验证);//将提交的字符串数据转换为字节数组byte[]postData=Encoding.ASCII.GetBytes(postString);//设置请求参数request=WebRequest.Create(url)asHttpWebRequest;request.Method="POST";request.Referer=url;请求.KeepAlive=false;request.UserAgent="Mozilla/4.0(兼容;MSIE8.0;WindowsNT6.1;WOW64;Trident/4.0;SLCC2;.NETCLR2.0.50727;.NETCLR3.5.30729;.NETCLR3.0.30729;媒体中心PC6.0;InfoPath.2;CIBA)”;request.ContentType="application/x-www-form-urlencoded";request.CookieContainer=myCookieContainer;System.Net.Cookieck=newSystem.Net.Cookie("TestCookie1","测试cookie的值");ck.Domain=request.RequestUri.Host;请求.CookieContainer.Add(ck);request.CookieContainer.Add(response.Cookies);request.ContentLength=postData.Length;//提交请求数据System.IO.StreamoutputStream=request.GetRequestStream();请求.AllowAuto重定向=真;outputStream.Write(postData,0,postData.Length);outputStream.Close();//获取返回数据response=request.GetResponse()asHttpWebResponse;responseStream=response.GetResponseStream();reader=newSystem.IO.StreamReader(responseStream,Encoding.UTF8);srcString=reader.ReadToEnd();响应.Write(srcString);响应.End();这篇文章似乎有正面投票数的答案:C#keepsessionidoverhttpwebrequestcreatesaCookieContainerinstancewhenitmakesarequesttotheserverforfirsttime,insteadofcreatinganewinstanceforthenextrequest,andreusesthisinstance很有用,需要多了解C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: