怎么获取网站的动态验证码?

mimixi666 2014-06-18 06:04:04

其实我想获取当我准备要登录百度注册的时候,获得验证码图片,
本来想用HttpURLConnection.openConnection这个方法,获取那个验证码的,
但是在百度注册的时候,那个验证码,每次刷新网页,那串验证码图片的网址都不一样的。。
所以说HttpURLConnection.openConnection这个方法是失效的(或者说自己不会用)。。
https://passport.baidu.com/v2/?reg&fr=old&tpl=al&u=http://open.baidu.com/?reg=pass

现在的话,我只能在它加载完网页之后,才能正确读取当前真正的验证码,
那我有什么办法,在它不加载完网页之前,就获取我准备将要要登录百度注册网站的验证码图片?

其实不是很懂它,验证码的生成原理,就我猜的有两种,
1.在它完全加载完那个网站之后 -> 验证码图片才会触发-> 正确生成 -> 显示出来。
2.先发一个信号给那个网站,-> 生成验证码 -> 加载整个网站之后 -> 把生成的验证码显示出来。

不知道还会不会有其它方法,如果是发信号的话,那我应该有什么技巧或者方法,可以
或者这个信号。

说得有点乱,不过应该能看得懂吧?
...全文
3044 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_31184701 2016-05-24
  • 打赏
  • 举报
回复
有没有人解答一下,最后怎么解决的?
  • 打赏
  • 举报
回复
请问这个问题怎么解决的
csx123 2015-08-11
  • 打赏
  • 举报
回复
你好,请问你这个问题解决了吗?能否告知思路,多谢
mimixi666 2014-06-24
  • 打赏
  • 举报
回复
引用 10 楼 ygycomon 的回复:
sorry, 我理解错了你的问题,我以为你是想要保持会话,结果你不是。 我刚才看了一下baidu的交互流程,有点复杂。没有研究完全,有兴趣你可以自己研究一下。 https://passport.baidu.com/cgi-bin/genimage?captchaservice636364325a56754534414a7a4944416c764d7a3538474c4839654e4a78564434357176417565714736756d6346466a6c636b65722f77526c42383037667843536341786f5069396a31376341683264624e37362f70436d586239385553734a6a674153465a4d6e7350694c51522b74746746674765627a4262365549356367656267433830784b3858426b6e6173713467555770386d586f55637536372f345052656666645a7a47317a384871502b4e30554e755a694c57387a4442645570746a444d7466652f67546a424953732f52786279383241455749535a44617a52726b64453136574d3547363431494a7055426c5634695041787a426b2f3351786e4766567158354b6e532b5a71416d61696245796b2f6b7769325246647a4a774d3449746e 这是百度获取验证码的链接,参数captchaservice后面那一长串是百度服务器动态生成的,这就是为什么你每次刷新页面验证码都不一样的原因。 https://passport.baidu.com/v2/?reggetcodestr&token=6f384f575823212d16315309df7070a6&tpl=al&apiver=v3&tt=1403242386354&app=&callback=bd__cbs__1feny9 通过这个链接可以请求到上面那个captchaservice后面的参数,但是这个请求中的参数token什么的具体怎么来的我就没仔细看了。 百度在这个前端的交互不是一般的复杂,虽然web公网不安全,但是要研究透这些交互协议,很要花一些时间。
您好,如果我能准确获得你这个 https://passport.baidu.com/v2/?reggetcodestr&token=6f384f575823212d16315309df7070a6&tpl=al&apiver=v3&tt=1403242386354&app=&callback=bd__cbs__1feny9 地址的话,那我整体的流程到底是怎么样的? 搞了那么久,我连流程都还不懂, 拿https://passport.baidu.com/v2/?reg来实现的话: 第一步是不是: Url url = new Url("https://passport.baidu.com/v2/?reg"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 这样? 然后我该怎么做? 用了前几楼的前辈所介绍的httpwatch的工具,研究了一个下午,也刚好跟上你的脚步,也是研究到 https://passport.baidu.com/v2/?reggetcodestr&token=6f384f575823212d16315309df7070a6&tpl=al&apiver=v3&tt=1403242386354&app=&callback=bd__cbs__1feny9 这里,就不知道怎么办了, 不过现在我更不明白的整个流程是怎么样的。。 期待你的回复。。
mimixi666 2014-06-24
  • 打赏
  • 举报
回复
引用 11 楼 xmt1139057136 的回复:
网站的大部分验证码都是图片做的。后台存在session中,如果要动态识别验证码的话,也很简单。就是把请求连接中的验证码图片保存下来,使用图片识别技术,就可以知道图片上是什么验证码了。这个对于简单的,颜色单一,不算复杂,非动态的,还是小菜。对于动态的,就比较难了。不过谷歌已经表过态,对于目前的验证码,基本上可以99.9%的破解。谷歌也在积极的开发更安全的,下一代验证码技术。
谢谢回复,其实我不需要用图片识别技术的。。 但是你说的,我有一点不是很明白,就是 把请求连接中的验证码图片保存下来 你是怎么可以把验证码的图片保存下来? 你怎么获得这个验证码的图片? 就拿百度注册这个来说: https://passport.baidu.com/v2/?reg 你用程序怎么实现? 期待你的回复,谢谢谢。。
jiabiaoli 2014-06-20
  • 打赏
  • 举报
回复
抓到图片,如何识别呢,再加个图片识别?
剑神一笑 2014-06-20
  • 打赏
  • 举报
回复
下个httpwatch 观察下验证码后面带的那一串字符时怎么来的 这个还是很好解决的
mimixi666 2014-06-20
  • 打赏
  • 举报
回复
引用 4 楼 zhblue 的回复:
楼上说的都对 补充一点 cookie是用http header发送的,往来都(可以)有。
你说的是这样吗:

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置 URL 请求的方法
conn.setRequestMethod("GET");
String cookie = conn.getHeaderField("set-cookie");
System.out.println("cookie : " + cookie);
但是打印出来的,不是验证码的图片的连接地址啊。。。 cookie : PASSID=gvXk8V; expires=Thu, 20-Jun-2013 00:42:08 GMT; path=/; domain=passport.baidu.com; httponly 昨天搜索了一天,都还不是很能理解你说的意思,都不知道关键词是不是没有打对。。。 求再次指教,谢谢回复。。
mimixi666 2014-06-20
  • 打赏
  • 举报
回复
引用 3 楼 ygycomon 的回复:
[quote=引用 2 楼 mimixi666 的回复:] [quote=引用 1 楼 ygycomon 的回复:] 你不用纠结页面有没有加载完,验证码是和会话session挂钩的,session是和cookie挂钩的,你只要获取cookie就可以了随意获取当前会话有效的验证码图片
哦哦哦,原来是这样, 那我要获得这个验证码的cookie,该怎么办? 新人,希望能给我多一点提示,真的非常感谢。。 [/quote] 拿cookie,请求的时候把cookie带上。 不要问我怎么拿cookie。。[/quote] 是这样拿吗?昨天百度了一天:

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置 URL 请求的方法
conn.setRequestMethod("GET");
String cookie = conn.getHeaderField("set-cookie");
System.out.println("cookie : " + cookie);

但是出现的是这个,不是图片的连接地址吖。。。 cookie : PASSID=gvXk8V; expires=Thu, 20-Jun-2013 00:42:08 GMT; path=/; domain=passport.baidu.com; httponly 难道是我拿的方式不正确? 我是用百度注册那个网站测试的:https://passport.baidu.com/v2/?reg&fr=old&tpl=al&u=http://open.baidu.com/?reg=pass 大神,我知道你不喜欢伸手党,但是现在我真的不知道怎么下手来解决这个问题,怎么百度,怎么搜索也不知道, 新人求谅解。。
业余草 2014-06-20
  • 打赏
  • 举报
回复
网站的大部分验证码都是图片做的。后台存在session中,如果要动态识别验证码的话,也很简单。就是把请求连接中的验证码图片保存下来,使用图片识别技术,就可以知道图片上是什么验证码了。这个对于简单的,颜色单一,不算复杂,非动态的,还是小菜。对于动态的,就比较难了。不过谷歌已经表过态,对于目前的验证码,基本上可以99.9%的破解。谷歌也在积极的开发更安全的,下一代验证码技术。
致知Fighting 2014-06-20
  • 打赏
  • 举报
回复
sorry, 我理解错了你的问题,我以为你是想要保持会话,结果你不是。 我刚才看了一下baidu的交互流程,有点复杂。没有研究完全,有兴趣你可以自己研究一下。 https://passport.baidu.com/cgi-bin/genimage?captchaservice636364325a56754534414a7a4944416c764d7a3538474c4839654e4a78564434357176417565714736756d6346466a6c636b65722f77526c42383037667843536341786f5069396a31376341683264624e37362f70436d586239385553734a6a674153465a4d6e7350694c51522b74746746674765627a4262365549356367656267433830784b3858426b6e6173713467555770386d586f55637536372f345052656666645a7a47317a384871502b4e30554e755a694c57387a4442645570746a444d7466652f67546a424953732f52786279383241455749535a44617a52726b64453136574d3547363431494a7055426c5634695041787a426b2f3351786e4766567158354b6e532b5a71416d61696245796b2f6b7769325246647a4a774d3449746e 这是百度获取验证码的链接,参数captchaservice后面那一长串是百度服务器动态生成的,这就是为什么你每次刷新页面验证码都不一样的原因。 https://passport.baidu.com/v2/?reggetcodestr&token=6f384f575823212d16315309df7070a6&tpl=al&apiver=v3&tt=1403242386354&app=&callback=bd__cbs__1feny9 通过这个链接可以请求到上面那个captchaservice后面的参数,但是这个请求中的参数token什么的具体怎么来的我就没仔细看了。 百度在这个前端的交互不是一般的复杂,虽然web公网不安全,但是要研究透这些交互协议,很要花一些时间。
tony4geek 2014-06-19
  • 打赏
  • 举报
回复
浏览器模拟,抓包工具看看。
歪嘴鱼 2014-06-19
  • 打赏
  • 举报
回复
楼上说的都对 补充一点 cookie是用http header发送的,往来都(可以)有。
致知Fighting 2014-06-19
  • 打赏
  • 举报
回复
引用 2 楼 mimixi666 的回复:
[quote=引用 1 楼 ygycomon 的回复:] 你不用纠结页面有没有加载完,验证码是和会话session挂钩的,session是和cookie挂钩的,你只要获取cookie就可以了随意获取当前会话有效的验证码图片
哦哦哦,原来是这样, 那我要获得这个验证码的cookie,该怎么办? 新人,希望能给我多一点提示,真的非常感谢。。 [/quote] 拿cookie,请求的时候把cookie带上。 不要问我怎么拿cookie。。
mimixi666 2014-06-18
  • 打赏
  • 举报
回复
引用 1 楼 ygycomon 的回复:
你不用纠结页面有没有加载完,验证码是和会话session挂钩的,session是和cookie挂钩的,你只要获取cookie就可以了随意获取当前会话有效的验证码图片
哦哦哦,原来是这样, 那我要获得这个验证码的cookie,该怎么办? 新人,希望能给我多一点提示,真的非常感谢。。
致知Fighting 2014-06-18
  • 打赏
  • 举报
回复
你不用纠结页面有没有加载完,验证码是和会话session挂钩的,session是和cookie挂钩的,你只要获取cookie就可以了随意获取当前会话有效的验证码图片

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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