java中通过httpclient下载指定的验证码失败

lonelydreamsym 2011-06-16 06:01:39
如题,地址为:http://www.lyjjzd.com/wfcx.asp,这里面查询时有验证码,在程序中通过httpclient访问这个面页,然后访问页面中的难码,但总是返回空信息,不知道为啥,这种访问访问其它网站的验证码都是正常的,挺让人郁闷的,给瞧瞧如何处理。
...全文
169 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
checktime 2011-07-01
  • 打赏
  • 举报
回复
之前遇到的问题是,用URL 类能获得 验证码,但是用httpclient时的 getResponseBodyAsStream 返回的时候,转成imageicon 出不来图片,后来发现,用in.avaiable()返回的是空,看解释说,返回0是正常的,然后直接用ByteArrayInputStream 转了一次再用BufferedImage再转一次,然后new ImageIcon 就出来了,还没研究为什么会这样,之前测试jsp时候没有问题,在asp下有这个问题,郁闷啊
xwmr1988 2011-06-17
  • 打赏
  • 举报
回复
大家好哦,路过
lonelydreamsym 2011-06-17
  • 打赏
  • 举报
回复
程序中保持会话的情况下,先访问页面,然后找到页面中的图片的url,再接着访问图片,也是不成的。
lonelydreamsym 2011-06-17
  • 打赏
  • 举报
回复
楼上几位的方法,早都试过了,都搞不定,才来这里开这个帖子的,大家可直接试下,找到url中直接在浏览器中是打不开的。我用java和net都测试过,获取不到图片。
xuejelly 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 magong 的回复:]
引用 3 楼 lonelydreamsym 的回复:

呵呵,这个是比较奇怪的,找对了url它也不会显示的,偶奇怪的也是这里,目前反复测试,除了直接在页面里能显示,其它各种方式都不显示,让人不是一般的郁闷。

你这样操作肯定可以:
1 用浏览器打开网页
2 浏览页面源码,找到参数,如".24566"之类的
3 将该参数附缀到URL中,可以直接下载到图片(我验证过)

那么你需要在……
[/Quote]
+1
magong 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lonelydreamsym 的回复:]

呵呵,这个是比较奇怪的,找对了url它也不会显示的,偶奇怪的也是这里,目前反复测试,除了直接在页面里能显示,其它各种方式都不显示,让人不是一般的郁闷。
[/Quote]
你这样操作肯定可以:
1 用浏览器打开网页
2 浏览页面源码,找到参数,如".24566"之类的
3 将该参数附缀到URL中,可以直接下载到图片(我验证过)

那么你需要在程序中用httpclient模拟这个次序,第一步抓到网页后,从网页中萃取出正确的参数。
Fly_m 2011-06-16
  • 打赏
  • 举报
回复
我刚看一下url界面。
这里面它显示的图片,是根据后面的一个参数确定的。如果你随便给个参数的话,那是显示不了图片的。

我想这个随便数跟session相关。因此,你重新发请求,去读取这个图片,由于session变了,肯定读不了图片了。
因此,在读取图片时,要使用与前一次访问网页地址同样的一个session,否则就取不到图片。并且,访问一次图片变一次,所以不要重复访问(验证码重新生成了)。
小伙 2011-06-16
  • 打赏
  • 举报
回复
HttpAnalyzerStdV6这个工具你用过就最好(抓网页的)
你通过
httpGet= new HttpGet("http://www.lyjjzd.com/wfcx.asp")
httpGet.setHeader("Referer","页面由来的网页"); //有时候可以没有
response=httpclient.execute(httpGet);
String contentString = EntityUtils.toString(response.getEntity());
System.out.println(contentString); //这里面是你请求网址的所有内容;
你需要截取contentString的内容取得图片的href="url内容"
httpGet.abort() 终止httpGet请求
你再发送请求url内容;
httpGet= new HttpGet("http://www.lyjjzd.com/"+url内容) 这里面是你请验证码图片的完整url
File file = new File("C:/Users/guo/workspace/ghn/tesseract/cPic.gif");
response=httpclient.execute(httpGet);
InputStream is = response.getEntity().getContent();
FileOutputStream fos = new FileOutputStream(file);
int len;
byte[] b = new byte[buffer];
while((len=is.read(b,0,1024))!=-1){
fos.write(b,0,len);
}
fos.flush();
is.close();
fos.close();
这样可以保存图片..希望对您有用哦
hymagic 2011-06-16
  • 打赏
  • 举报
回复
学习学习
lonelydreamsym 2011-06-16
  • 打赏
  • 举报
回复
呵呵,这个是比较奇怪的,找对了url它也不会显示的,偶奇怪的也是这里,目前反复测试,除了直接在页面里能显示,其它各种方式都不显示,让人不是一般的郁闷。
magong 2011-06-16
  • 打赏
  • 举报
回复
验证码就是图片而已。
URL找对了就行了。
这个页面中的验证码需要一个URL参数来决定验证码,不是随机生成的,倒是有点奇怪。
lonelydreamsym 2011-06-16
  • 打赏
  • 举报
回复
自己顶下

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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