谢谢 我不希望再有人回答什么
 Response.Redirect
或者是
直接传参了。
B服务器的一个验证码对应一个session这个不是传参问题。是如何去匹配B服务器的session
我查过google,baidu,问过朋友
几乎没人解决。故发帖请教高手

解决方案 »

  1.   

    应该可以的。。因为使用
    Stream outStream = request.GetRequestStream(); 
            outStream.Write(data, 0, data.Length); 
            outStream.Close(); 
            HttpWebResponse response = request.GetResponse() as HttpWebResponse; 
            Stream inStream = response.GetResponseStream(); 可以正确登陆,并且返回登陆后B网站的字节流信息。
    我做到了。并且获得登陆后的所有信息。
    关键是如何登陆并跳转到B网站。
      

  2.   

       protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                HttpWebRequest request = WebRequest.Create("http://www.b.cn/index.jsp") as HttpWebRequest;
                //获取request信息
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                //根据request信息获取response
                string cookie = response.Headers["Set-Cookie"].Split(';')[0];
                //根据response获得相应的cookies
                response.Close();
                request.Abort();
                //关闭两者
                //放入session
                Session["imgcookie"] = cookie;
                this.Image1.ImageUrl = "Default2.aspx";
            }
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            HttpWebRequest request = WebRequest.Create("http://www.b.cn/login.jsp") as HttpWebRequest;
            request.Method = "POST";
            request.Referer = "http://www.b.cn/index.jsp";
            request.Headers.Add("Cookie", Session["imgcookie"].ToString());
            request.ContentType = "application/x-www-form-urlencoded";
            Encoding encoding = Encoding.GetEncoding("gb2312");
            string uname = this.TextBox1.Text.Trim();
            string pass = this.TextBox2.Text.Trim();
            string code = this.TextBox3.Text.Trim();        string postdata = "userid=" + pass + "&userkey=" + uname + "&verifycode=" + code + "";        byte[] data = encoding.GetBytes(postdata);
            request.ContentLength = data.Length;
           
            Stream outStream = request.GetRequestStream();
            outStream.Write(data, 0, data.Length);
            outStream.Close();
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            Stream inStream = response.GetResponseStream();        using (StreamReader reader = new StreamReader(inStream, encoding))
            {
                string content = reader.ReadToEnd();
               // content.Replace("default.jsp", "Default3.aspx");            //content "<meta http-equiv=refresh content=\"3;URL=default.jsp\"><script Language=Javascript>alert('请注意,客户在提交短信的时候请预留3个字作为后缀。安徽会员类短信的统一后缀为【H】');location.href='default.jsp';</script>\r\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">\r\n<LINK href=\"../Css/Css.css\" type=text/css rel=stylesheet>\r\n<title> -- 会员登录</title>\r\n</head>\r\n\r\n<body>\r\n\r\n\r\n\r\n</body>\r\n</html>\r\n" string            Response.Write(content);
            }        inStream.Close();
            response.Close();
            request.Abort();
                }
    验证码页面:    protected void Page_Load(object sender, EventArgs e)
        {
            string cookie = Session["imgcookie"].ToString();        WebClient _Client = new WebClient();
            //建立新的请求
            _Client.Headers.Add("Cookie", cookie);
            //将新的请求添加cookies头
            byte[] _ImageBytes = _Client.DownloadData("http://www.b.cn/GetCode.jsp");
            //获取图片字节流
            _Client.Dispose();
            //释放客户端信息
            MemoryStream ns = new MemoryStream(_ImageBytes);
            //内存流转换
            //Bitmap img = (Bitmap)(Bitmap.FromStream(ns));
            System.Drawing.Image image = System.Drawing.Image.FromStream(ns);
            Response.BinaryWrite((byte[])_ImageBytes);
            
            //image.Save("c:\\2.jpg");
            //Response.BinaryWrite((byte[])_ImageBytes);
            //转换为图片
        }
      

  3.   

    不是验证码的问题
    验证码本来就是用户手动
    关键是用户提交后在B服务器的session,如何和验证码的session匹配的问题
      

  4.   

    楼主的代码,是否已经能成功登陆呢?
    如果可以获取登陆以后的信息,那就可以了啊,后面再获取其它登陆后才能查看的页面信息应该很容易了。
    如果是POST到登陆页面以后,返回的是登陆错误,说明代码还有问题。
      

  5.   

    登陆成功。。
    但是我现在不是要使用StreamReader获得登陆成功后返回的流
    而是要直接跳转到登陆后的页面。就是这个问题困扰着俺
      

  6.   

    "ASPSESSIONIDCSTQRADB=PHOLFNOCHJBAIADGHMDIKOKO"
    这是服务器返回的sessionid
    要将这个id应用在所有的有关对B服务器的操作上
    如果是使用C#。那么
    HttpWebRequest和WebClient
    都有
    WebClient _Client = new WebClient();
    _Client.Headers.Add("Cookie", cookie);
    和request.Headers.Add("Cookie", Session["imgcookie"].ToString());
    方法
    但这样登陆的话获得的是B服务器的数据流。我想要直接跳转到B服务器而不是获得登陆成功的数据流所以被卡住了。我的意思是如何在 跳转的时候加上"ASPSESSIONIDCSTQRADB=PHOLFNOCHJBAIADGHMDIKOKO"
    这段服务器分配给我的sessionid。让服务器知道我来自这个会话。而不是重新分配给我一个session
      

  7.   

    手动跳转会分配一个新的session。所以跳转后会到error页面
      

  8.   

    晕死,你在手动跳转的时候,当然要把原来的cookies放到WebRequest里面了,这样就不会产生新的session了
      

  9.   

    汗,你原来代码里面不是已经实现了嘛:
    request.Headers.Add("Cookie", Session["imgcookie"].ToString()); 
      

  10.   

    晕  利用这个怎么让浏览器跳转到
    www.b.com页面啊
    貌似利用这个只能获得登陆后的数据流来着
    现在是想让浏览器跳转啊。