当前位置:编程学习 > C#/ASP.NET >>

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,