带ASP.NET_SessionId获取验证码问题?

zengbingling 2011-11-21 05:43:42
public Bitmap GetCodeImage()
{
string cookieHeader = "rtime=1; ltime=1321858632937; cnzz_eid=98605368-1321679713-; cnzz_a644725=10; sin644725=none; ASP.NET_SessionId=zoojtrmg0jjb1cfkj5unpj3n; rtime=0; ltime=1321703051546; cnzz_eid=24475558-1321703043-http%3A//cn.bing.com/search%3Fq%3Dwww.100mai.net%26src%3DIE-SearchBox%26FORM";
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://www.100mai.net/admin/checkCode.aspx");
CookieContainer co = new CookieContainer();
co.SetCookies(new Uri("http://www.100mai.net"), cookieHeader);
httpWebRequest.CookieContainer = co;

httpWebRequest.Accept = "*/*";
httpWebRequest.Referer = config.LoginUrl;
httpWebRequest.UserAgent = " Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727)";
httpWebRequest.Method = "GET";
httpWebRequest.Headers.Set("Accept-Encoding", "gzip, deflate");
httpWebRequest.Headers.Set("Accept-Language", "zh-CN");
httpWebRequest.KeepAlive = true;

HttpWebResponse webResponse = (HttpWebResponse)httpWebRequest.GetResponse();
Stream responseStream = webResponse.GetResponseStream();
Image original = Image.FromStream(responseStream);
Bitmap bitMap = new Bitmap(original);
responseStream.Close();
return bitMap;
}
问题:为什么用同一个ASP.NET_SessionId每次获取的验证码不一样。
是按http://topic.csdn.net/u/20100604/18/fadb1e99-e010-4aad-9e4f-bf5f0f745ee1.html的方法改的。
...全文
428 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengbingling 2011-11-24
  • 打赏
  • 举报
回复
高手请进...
zengbingling 2011-11-24
  • 打赏
  • 举报
回复
调试了几天,还是不行。下面我把全部代码贴出来。好心人帮忙看看,找找原因。小弟在此跪拜了!

SimulatgedLogin simulatgeLogin = null;
public Form1()
{
InitializeComponent();

}
private void btnLogin_Click(object sender, EventArgs e)
{
simulatgeLogin.PostData();
string r = simulatgeLogin.GetPage();
}

private void btnCode_Click(object sender, EventArgs e)
{
simulatgeLogin = new SimulatgedLogin();
WebSiteConfig config = new WebSiteConfig();
config.LoginUrl = "http://www.100mai.net/admin/Login.aspx";
config.EncodingString = "utf-8";
config.VaildImageUrl = "http://www.100mai.net/admin/checkcode.aspx";
config.SendUrl = "http://www.100mai.net/admin/mapping.aspx";
config.ContentType = "";
string viewstate = "__VIEWSTATE=%2FwEPDwUKLTgyMzU2MjY0MWQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFDEltYWdlQnV0dG9uMeaNAEEvYkhDK4L79p8bNzWrrahD&TextBox1=admin&TextBox2=agfsd&TextBox3=" + HttpUtility.UrlEncode(txtcode.Text.Trim()) + "&ImageButton1.x=0&ImageButton1.y=0";
config.ParamString = viewstate;
simulatgeLogin.config = config;

this.pictureBox1.Image = simulatgeLogin.GetVaildImage();
}

//登陆Class
public class SimulatgedLogin
{
string cookieHeader = null;

public WebSiteConfig config
{
get;
set;
}

public void PostData()
{
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(config.LoginUrl);
myHttpWebRequest.AllowAutoRedirect = true;
myHttpWebRequest.KeepAlive = true;
myHttpWebRequest.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*";
myHttpWebRequest.Referer = config.Referer;
myHttpWebRequest.UserAgent = " Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727)";

if (string.IsNullOrEmpty(config.ContentType))
{
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
}
else
{
myHttpWebRequest.ContentType = config.ContentType;
}
myHttpWebRequest.Method = "POST";
myHttpWebRequest.Headers.Add("Accept-Encoding", "gzip, deflate");
myHttpWebRequest.Headers.Add("Accept-Language", "zh-CN");

myHttpWebRequest.CookieContainer = new CookieContainer();
if (cookieHeader != null)
{
myHttpWebRequest.CookieContainer.SetCookies(new Uri(config.LoginUrl), cookieHeader); }

byte[] postData = Encoding.GetEncoding(config.EncodingString).GetBytes(config.ParamString);
myHttpWebRequest.ContentLength = postData.Length;
System.IO.Stream PostStream = myHttpWebRequest.GetRequestStream();
PostStream.Write(postData, 0, postData.Length);
PostStream.Close();

HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.GetResponse();
if (myHttpWebRequest.CookieContainer != null)
{
cookieHeader = myHttpWebRequest.CookieContainer.GetCookieHeader(new Uri(config.LoginUrl)); }
}

public Bitmap GetVaildImage()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(config.LoginUrl);
request.Credentials = CredentialCache.DefaultCredentials;
request.Accept = "*/*";
request.Referer = config.Referer;
request.UserAgent = " Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727)";
request.Method = "GET";
request.KeepAlive = true;
request.Headers.Set("Accept-Language", "zh-CN");
request.Headers.Set("Accept-Encoding", "gzip, deflate");
request.CookieContainer = new CookieContainer();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
cookieHeader = request.CookieContainer.GetCookieHeader(new Uri(config.LoginUrl));

Bitmap bit = GetCodeImage();
return bit;
}

/// <summary>
/// 产生新的验证码
/// </summary>
Bitmap GetCodeImage()
{
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(config.VaildImageUrl);
httpWebRequest.Accept = "*/*";
httpWebRequest.UserAgent = " Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727)";
httpWebRequest.Method = "GET";
httpWebRequest.Headers.Set("Accept-Encoding", "gzip, deflate");
httpWebRequest.Headers.Set("Accept-Language", "zh-CN");
httpWebRequest.KeepAlive = true;

httpWebRequest.CookieContainer = new CookieContainer();
httpWebRequest.CookieContainer.SetCookies(new Uri(config.VaildImageUrl), cookieHeader);
HttpWebResponse webResponse = (HttpWebResponse)httpWebRequest.GetResponse();
string sid=httpWebRequest.CookieContainer.GetCookieHeader(new Uri(config.VaildImageUrl));
Stream responseStream = webResponse.GetResponseStream();
Image original = Image.FromStream(responseStream);
Bitmap bitMap = new Bitmap(original);
responseStream.Close();
return bitMap;
}
}
疑惑:当登陆不要验证码时可以成功。为了确认是否验证部分问题,我登陆一个不带验证码的网站,但是设置cookieHeader一个初始值也登陆不成功.还有为什么代码中红色部分执行后到蓝色部分cookie会重复;例如cookieHeader="ASP.NET_SessionId=qsw0jnev240teo45egerpua5; test=test; ASP.NET_SessionId=qsw0jnev240teo45egerpua5; test=test"
yeyuhongchch 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sandy945 的回复:]

http://www.haogongju.net/art/235438
[/Quote]这个还靠点谱~~~
dalmeeme 2011-11-21
  • 打赏
  • 举报
回复
机器人 2011-11-21
  • 打赏
  • 举报
回复
验证码一次请求就重新生成的。你第一次get之后就别再刷了。
阿非 2011-11-21
  • 打赏
  • 举报
回复

62,017

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧