public static CookieContainer CookieContainers = new CookieContainer();
        public Form1()
        {
            InitializeComponent();
        }        private void button1_Click(object sender, EventArgs e)
        {
            string username = textBox2.Text.Trim();
            string password = textBox3.Text.Trim();
            string code = textBox4.Text.Trim();
            string data="__VIEWSTATE=dDwtMTg3MTM5OTI5MTs7PhMbjAbINgvvHsvy%2FQdjcw3RMlRn&TextBox1="+username+"&TextBox2="+password+"&TextBox3="+code+"&RadioButtonList1=%D1%A7%C9%FA&Button1=&lbLanguage=";
            string loginurl = "http://xk4.suda.edu.cn/";            getresponse(loginurl,data);
        }        private void getresponse(string loginurl,string data)
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(loginurl);
            req.KeepAlive = true;
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            req.UserAgent = "User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)";
            req.Accept = "Accept text/html, application/xhtml+xml, */*";
            req.Timeout = 50000;
            req.AllowAutoRedirect = true;
            req.CookieContainer = CookieContainers;
            
            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] postBytes = encoding.GetBytes(data);
            req.ContentLength = postBytes.Length;
            Stream st = req.GetRequestStream();
            st.Write(postBytes, 0, postBytes.Length);
            st.Close();
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            Stream resset = res.GetResponseStream();
            Encoding myEncoding = Encoding.GetEncoding("gb2312");
            StreamReader sr = new StreamReader(resset, myEncoding);
            string str = sr.ReadToEnd();
            textBox1.Text = str;
            webBrowser1.DocumentText = textBox1.Text;
        }        private void pictureBox1_Click(object sender, EventArgs e)
        {        }        private void button2_Click(object sender, EventArgs e)
        {
            HttpWebRequest webr = (HttpWebRequest)WebRequest.Create("http://xk4.suda.edu.cn/CheckCode.aspx");
            HttpWebResponse res = (HttpWebResponse)webr.GetResponse();
            Stream stream=res.GetResponseStream();
            pictureBox1.Image = Image.FromStream(stream);
            stream.Close();
        
这之中的手动输入验证码怎么总是错误啊。是什么地方错了啊???总是显示输入的验证码不正确。但是明明输入的与取得的验证码相同的。。到底是什么情况。马上结。

解决方案 »

  1.   

    viewstate每次都不同
    验证码不能获取两次,否则会产生一个新的。你用fiddler或者httpwatch抓数据包自己看下。
      

  2.   

    我用的是firebug进行抓包的,能具体的说一下到底错在什么地方吗???
      

  3.   

    是session不同步,解决办法定义一个全局变量string cookie=string.Emtpy;HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://xk4.suda.edu.cn/CheckCode.aspx");
    HttpWebResponse response = (HttpWebResponse)webr.GetResponse();
    Stream stream=response.GetResponseStream();
    pictureBox1.Image = Image.FromStream(stream);
    stream.Close();
    if (null != request)
        request.Abort();
    if (null != response)
        response.Close();
    cookie = response.Headers.Get("Set-Cookie");private void getresponse(string loginurl,string data)
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(loginurl);
                req.Headers[HttpRequestHeader.Cookie] = cookie;
                req.KeepAlive = true;
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                req.UserAgent = "User-Agent   Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)";
                req.Accept = "Accept  text/html, application/xhtml+xml, */*";
                req.Timeout = -1;
                req.AllowAutoRedirect = true;
                req.CookieContainer = CookieContainers;
                 
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] postBytes = encoding.GetBytes(data);
                req.ContentLength = postBytes.Length;
                Stream st = req.GetRequestStream();
                st.Write(postBytes, 0, postBytes.Length);
                st.Close();
                HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                Stream resset = res.GetResponseStream();
                Encoding myEncoding = Encoding.GetEncoding("gb2312");
                StreamReader sr = new StreamReader(resset, myEncoding);
                string str = sr.ReadToEnd();
                textBox1.Text = str;
                webBrowser1.DocumentText = textBox1.Text;
            }
      

  4.   

    我也遇到了你那个问题,请问下你是怎么解决的,我这里模拟登录的是没有cookie的!应该和你的问题一样!老是提示验证码错误!