如题:我做的是一个自动评论的程序,登录网站的方式是百度登录,这里我成功了,得到了百度提供的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