当前位置: 代码迷 >> C# >> 第一次发帖,遇上一个难题,求大神帮忙,关于模拟登录验证码异常的有关问题
  详细解决方案

第一次发帖,遇上一个难题,求大神帮忙,关于模拟登录验证码异常的有关问题

热度:56   发布时间:2016-05-05 03:00:09.0
第一次发帖,遇上一个难题,求大神帮忙,关于模拟登录验证码错误的问题
如题:我做的是一个自动评论的程序,登录网站的方式是百度登录,这里我成功了,得到了百度提供的Cookies.接下来我需要用这些cookies到指定的页面post评论数据,但是那个页面每次评论也是有验证码的,我请求了验证码图片后输入提交,总是返回验证码错误,请问这是什么问题?
是因为我cookies丢失吗?
PS:我所有的请求用的都是同一个对象,Cookies都有保存下来,而且设置了永不过期
具体代码如下:
 public class HttpHelper
   {
       #region 网页请求
       HttpWebRequest request = null;
        HttpWebResponse response = null;
        CookieContainer cc = new CookieContainer();
        /// <summary>
        /// Get方式获取页面响应内容
        /// </summary>
        public string GetPageResponse_Get(string url,string referer,string request_Accept)
        {
            try
            {
                string content = "";
                request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                request.Referer = referer;
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0";
                request.Headers["Accept-Language"] = "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3";
                request.KeepAlive = true;
                request.Accept = request_Accept;
                request.Host = new Uri(url).Host;
                request.AllowAutoRedirect = false;
                request.CookieContainer = cc;
                using (response = (HttpWebResponse)request.GetResponse())
                {
                    //第一次从http:\\www.baidu.com中获取BAIDUID时,发现该cookie会当场失效,此处修改保存期限
                    foreach (Cookie ck in response.Cookies)
                    {
                        ck.Expires = DateTime.MaxValue;
                    }
                    Stream stream = response.GetResponseStream();
                    StreamReader reader = new StreamReader(stream);
                    content = reader.ReadToEnd();
                    cc.Add(response.Cookies);
                    ///执行保存cookies
                    if (response.Cookies.Count == 0)
                    stream.Close();
                    reader.Close();
                }
                return content;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
            return null;
        }
        /// <summary>
        /// Post数据获取响应
        /// </summary>
        public string GetPageResponse_Post(string url, string postData, string referer)
        {
            try
            {
                string content = "";
                request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "Post";
                request.Timeout = 20000;
                request.Headers["Cache-control"] = "no-cache";
                request.Headers["Accept-Language"] = "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3";
                request.Headers["DNT"] = "1";
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0";
                request.Referer = referer;
                request.ContentType = "application/x-www-form-urlencoded";
                request.KeepAlive = true;
                request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                request.Host = new Uri(url).Host;
                request.AllowAutoRedirect = false;
                request.CookieContainer = cc;
                ///携带cookiesPost数据
                byte[] dataByte = Encoding.UTF8.GetBytes(postData);
                request.ContentLength = dataByte.Length;
                using (Stream stream = request.GetRequestStream())
                {
                    stream.Write(dataByte, 0, dataByte.Length);
                }
                using (response = request.GetResponse() as HttpWebResponse)
                {
                    
                    using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
                    {
                        content = reader.ReadToEnd();
                    }
                    cc.Add(response.Cookies);
                }
                return content;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
            return null;
        }
        //验证码请求
        public Bitmap GetCode(string url, string referer)
        {
            try
            {
                request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                request.Timeout = 20000;
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0";
                request.KeepAlive = false;
                request.Accept = "image/png,image/*;q=0.8,*/*;q=0.5";
                request.Host = new Uri(url).Host;
                request.AllowAutoRedirect = false;
                request.CookieContainer = cc;
                response = (HttpWebResponse)request.GetResponse();
                //验证码放大显示
                Bitmap bp = new Bitmap(135, 63);
                using (Stream stream = response.GetResponseStream())
                {
                    Graphics g = Graphics.FromImage(bp);
                    g.DrawImage(Image.FromStream(stream), 0, 0, 135, 63);
                    cc.Add(cookies);
                }
                return bp;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
            return null;
        }
       #endregion
------解决思路----------------------
仔细检查一下代码的逻辑
------解决思路----------------------
原因100%是因为缺少cookie
  相关解决方案