HttpWebRequest登录Redirect问题
说明:模拟登录已经成功,获取其他页面数据跟踪测试也正常,但是就是在Redirect时跳转到了登录页面,求解看了很多网站上提出的类似问题:原因大概就是cookie问题,以下为部分代码:
public CookieCollection CCol = null;
string User = "sh";//这个不是真实的
string Pass = "123";
CookieContainer cookieFromStep1;
if (HttpContext.Current.Session["PriseSession"] == null)
{
cookieFromStep1 = new CookieContainer();
HttpContext.Current.Session["PriseSession"] = cookieFromStep1;
}
else
{
cookieFromStep1 = (CookieContainer)HttpContext.Current.Session["PriseSession"];
}
string msg = string.Empty;
HttpClient hc = new HttpClient(cookieFromStep1);
string c = hc.GetSrc("http://****/index.aspx", "GB2312", out msg);
string PostData = "__EVENTTARGET=imgLogin";
PostData += "&__EVENTARGUMENT=";
PostData += "&__VIEWSTATE=" + new Regex("<input type=\\\"hidden\\\" name=\\\"__VIEWSTATE\\\" id=\\\"__VIEWSTATE\\\" value=\\\"(?<A>((?!\\\").)*)\\\" />").Match(c).Groups["A"].Value;
PostData += "&txtUserName=" + User;
PostData += "&txtPassword=" + Pass;
string server = "http://****/Login.aspx";
CookieContainer myCookieContainer = new CookieContainer();
StringBuilder sb = new StringBuilder(); //申明并初始化一个可变字符串
string _strToRequest = PostData;//提交的数据
byte[] bt = Encoding.Default.GetBytes(_strToRequest);//将提交的数据编码成字节码
HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(server);//申明一个提交数据的对象
Req.Timeout = 60000;//设置超时时间
Req.ContentType = "application/x-www-form-urlencoded";//编码格式
Req.ContentLength = bt.Length;//提交数据长度
Req.AllowAutoRedirect = false;//是否自动转向
Req.Accept = "*/*";//允许类型
Req.CookieContainer = myCookieContainer;
Req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; Alexa Toolbar)";//浏览器类型
Req.Method = "POST";//提交类型
Req.KeepAlive = true;//是否保持连接
// System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();//证书验证
Stream ReqStream = Req.GetRequestStream();//提交数据
ReqStream.Write(bt, 0, bt.Length);
ReqStream.Close(); //关闭
HttpWebResponse res = (HttpWebResponse)Req.GetResponse();//取得返回信息
res.Cookies = myCookieContainer.GetCookies(res.ResponseUri);
//for (int i = 0; i < res.Headers.Count; ++i)
//{
// sb.Append(res.Headers.Keys[i] + ":" + res.Headers[i] + "\r\n");
// }
CCol = myCookieContainer.GetCookies(Req.RequestUri);
sb.Append("\r\n\r\n");
StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.Default);//写入流
sb.Append(sr.ReadToEnd()); //取得数据
res.Close(); //关闭
sr.Close();
//dangdang_SaveCookies(sb.ToString());
HttpCookie cookie;
foreach (Cookie ck in CCol)
{
cookie = new HttpCookie(ck.Name, ck.Value);
//Response.AppendCookie(cookie);
//Response.SetCookie(cookie);
Response.Cookies.Add(cookie);//添加到本地
}
string p = GetPageData("http://****/tob/Index.aspx?type=0"); //这步跟踪显示返回页面数据是正确的
Response.Redirect("http://****/tob/Index.aspx?type=0");//此处跳转到了登录页面 --------------------编程问答-------------------- Response.Redirect(@"http://****/tob/Index.aspx?type=0")? --------------------编程问答-------------------- 没做过- - 围观学习 --------------------编程问答-------------------- //string p = GetPageData("http://****/tob/Index.aspx?type=0"); //这步跟踪显示返回页面数据是正确的
Response.Redirect("http://****/tob/Index.aspx?type=0");//此处跳转到了登录页面
-----------------------------------
上面的这行是测试的,下面这行是页面跳转 --------------------编程问答-------------------- 在跳转的时候用 url编码的方式 作为参数试试! --------------------编程问答-------------------- 有一种情况是可以跳转的,就是我先手动登录网站,然后再运行程序,在弹出的IE的窗口中可以正常跳转,跟踪正常情况下时,本地的Cookie和打开页面的Cookie是一样的,但是不正常时显示不一样的,就是怎么样能处理这个Cookie问题, --------------------编程问答-------------------- 估计要先把登录的信息写在cookie里,和手动登录是有一致的cookie --------------------编程问答-------------------- 有人么?哪个高手给处理一下啊,谢谢 --------------------编程问答-------------------- 有人么?哪个高手给处理一下啊,谢谢
补充:.NET技术 , ASP.NET