日期:2014-05-19  浏览次数:20785 次

实在忍不住要问大家了!怎样以当前的会话状态以一个HttpWebRequest去下载当前的验证码图片?
呵呵,实不相瞒,最近在做验证码识别。可就为了下载这个当前的验证码,搞了我一两天时间了,就是没搞定。我的验证码本来识别率是百分之百的,可每次POST出去都提示验证码错误,我觉得一定是每次下载的验证码不是当前的。

倒底是HttpWebRequest和HttpWebRespose的哪里出了问题呢?估计是与Cookie有关吧,我现在通过Cookie传递,可以用登录的COOKIE去成功POST一些不需要要验证码的数据上去,可一要求有验证码,我就POST不出去了。

麻烦各位   D   X帮忙看下这是怎么回事,小弟万分感谢!!

------解决方案--------------------
如果 没有 立即 得到 更新
可以在 验证码 图片文件 的路径后加参数

如:string imgsrc = "validpic.aspx?timer= " + DateTime.Now.ToString( "yyyy-MM-ddHHmmss ");
------解决方案--------------------
不要用HttpWebRequest和HttpWebRespose,用比他们封装得更好的WebClient类,具体你可以查看MSDN,WebClient类有个DownloadFile()方法,可以从一个指定的URL下载数据。具体使用方法你可以参考MSDN(都是中文的)。
关于你说的获取不了正确的验证码,有可能是因为服务器端对请求来源进行了判断,一般是下面几种:
1,判断引用页面,这个你可以在通过WebClient类这样设置WebClient.Headers.Add(HttpRequestHeader.Referer, "引用页 ");
2,判断COOKIE,这个你可以这样设置WebClient.Headers.Add(HttpRequestHeader.Cookie, "COOKIE的数据 ");
3,由引用页的传入参数判断,这个不是很好模拟,但是一般的网站对于一个用户只会存在一个有效的验证码,你可以利用这一点,比如你要做自动注册的功能,但是你无法正确获取自动注册那个页面的验证图片,你可以去获取他首页登陆部分的验证图片来当作注册页面的验证图片用。
就算是现在国内的那些大网站也有这样的漏洞。
------解决方案--------------------
牛,验证码都识别了,httpwebrequest这小地方卡住了。我做过动网灌水机,记得cookie是每次都变化的,每post和get一次都得重写cookie集合,就是如果不开ie,我把系统cookie目录下的cookie放程序里可以提交,如果我灌的时候开ie打开了那个网站,变马上就不能灌了,就是因为cookie不一样了,你get那个页面的时候覆盖一下cookie在get验证码试试啊。
------解决方案--------------------
保存cookie
------解决方案--------------------
以前偶是用xmlhttp来做的.每次request都有cookies的,所以貌似没发现这个问题.