问题描述
最近想通过asp后台去登陆一个网站,碰到了该网站的验证码的问题,验证码给的是一条链接没刷新一下就会变....但是直接获取该链接的图片输入,会提示验证码错误的提示.....真不知道他的验证码与什么挂钩的..。。求大神普及验证码的验证原理,简单说说就好
解决方案
解决方案二:
GoogleOCR验证码识别
解决方案三:
验证码是为了防止机器自动操作设计的,和任何编码无关。只和图像有关,保存在服务器内存中,随机生成。
解决方案四:
服务器生成验证码图片后,发到客户端的是一个图片链接,然后用户输入验证码后,在服务端做校验。大概就是这样的咯~至于怎么获取,暂时没有什么办法~
解决方案五:
验证码说明了就是一个随机数保存在Session中
解决方案六:
引用3楼laq616853363的回复:
服务器生成验证码图片后,发到客户端的是一个图片链接,然后用户输入验证码后,在服务端做校验。大概就是这样的咯~至于怎么获取,暂时没有什么办法~
以前我做模拟登陆微信还记得吧,获取验证码的方式是获取服务器发给你的Cookies,每次登陆的时候读取Cookies
解决方案七:
引用5楼a01589的回复:
以前我做模拟登陆微信还记得吧,获取验证码的方式是获取服务器发给你的Cookies,每次登陆的时候读取Cookies
这么说还是有办法获取到页面验证码的字符串的咯?
解决方案八:
引用6楼laq616853363的回复:
Quote: 引用5楼a01589的回复:
以前我做模拟登陆微信还记得吧,获取验证码的方式是获取服务器发给你的Cookies,每次登陆的时候读取Cookies这么说还是有办法获取到页面验证码的字符串的咯?
验证码分很多种,12306的那种不行,它是动态的,用简单的方法获取不到,以前做微信登陆那个是静态的,仅仅是一张图而已
解决方案九:
引用6楼laq616853363的回复:
Quote: 引用5楼a01589的回复:
以前我做模拟登陆微信还记得吧,获取验证码的方式是获取服务器发给你的Cookies,每次登陆的时候读取Cookies这么说还是有办法获取到页面验证码的字符串的咯?
模拟登陆说白了原理就是服务器把你写的程序当成了浏览器,这下你明白了吧,你的行为和浏览器一样,你就能做浏览器能做的事,Http协议无非就是Request和Response,这两个类在ASP.NET里面都封装好了,HttpRequest和HttpResponse,你发送请求的时候无非加上一些Head和一些别的什么,这些东西你打开一个网站,F12都能看到,模拟登陆,其实就是这么简单,最难的一点是获取验证码
解决方案十:
应该是与session挂钩的,然后判断你文本框输入的验证码跟session存储的随机生成的验证码比较
解决方案十一:
验证码就是图片识别功能!
解决方案十二:
建一个handler,输入以下代码publicvoidProcessRequest(HttpContextcontext){//清除该页输出缓存,设置该页无缓存context.Response.Buffer=true;context.Response.ExpiresAbsolute=System.DateTime.Now.AddMilliseconds(0);context.Response.Expires=0;context.Response.CacheControl="no-cache";context.Response.AppendHeader("Pragma","No-Cache");using(Bitmapmap=newBitmap(120,25,PixelFormat.Format32bppArgb)){using(Graphicsgraphics=Graphics.FromImage(map)){graphics.Clear(Color.White);//清除背景色stringstrArray="1234567890ABCDEFGHIJKLMNPRSTQUVWXYZabcdefghijklmnpqrstuvwxyz";Randomrandom=newRandom();stringstr=string.Empty;for(inti=0;i<6;i++){intj=random.Next(0,30);str+=strArray[j];}//写入Sessioncontext.Session["ImgCode"]=str;Rectanglerect=newRectangle(0,0,120,25);//Fillinthebackground.HatchBrushhatchBrush=newHatchBrush(HatchStyle.SmallConfetti,Color.LightGray,Color.White);graphics.FillRectangle(hatchBrush,rect);graphics.DrawString(str,newFont("CourierNew",18,FontStyle.Italic),Brushes.Blue,newPointF(2,2));for(inti=0;i<5;i++){intx1=random.Next(map.Width);intx2=random.Next(map.Width);inty1=random.Next(map.Height);inty2=random.Next(map.Height);graphics.DrawLine(newPen(Color.LightGray),x1,y1,x2,y2);}//画图片的前景噪音点for(inti=0;i<100;i++){intx=random.Next(map.Width);inty=random.Next(map.Height);map.SetPixel(x,y,Color.FromArgb(random.Next()));}map.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);graphics.Dispose();map.Dispose();}}}
前台加个img,<imgid="verify_image"src=""width="100"height="34"alt=""/>
一开始通过js获取,$(function(){getCodes();$('#verify_image').bind("click",function(){getCodes();});});functiongetCodes(){$('#verify_image').attr("src","Handler/ImgHandler.ashx?t="+(newDate()).getTime());}
解决方案十三:
可以看看论坛刚刚有人弄出来的动态闪的验证码,亦或是看一下这个非常周到的验证码,我想做个圆角图片的验证吗,有木有GDI大牛