java中通过httpclient下载指定的验证码失败 如题,地址为:http://www.lyjjzd.com/wfcx.asp,这里面查询时有验证码,在程序中通过httpclient访问这个面页,然后访问页面中的难码,但总是返回空信息,不知道为啥,这种访问访问其它网站的验证码都是正常的,挺让人郁闷的,给瞧瞧如何处理。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 验证码就是图片而已。URL找对了就行了。这个页面中的验证码需要一个URL参数来决定验证码,不是随机生成的,倒是有点奇怪。 呵呵,这个是比较奇怪的,找对了url它也不会显示的,偶奇怪的也是这里,目前反复测试,除了直接在页面里能显示,其它各种方式都不显示,让人不是一般的郁闷。 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内容) 这里面是你请验证码图片的完整urlFile 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();这样可以保存图片..希望对您有用哦 我刚看一下url界面。这里面它显示的图片,是根据后面的一个参数确定的。如果你随便给个参数的话,那是显示不了图片的。我想这个随便数跟session相关。因此,你重新发请求,去读取这个图片,由于session变了,肯定读不了图片了。因此,在读取图片时,要使用与前一次访问网页地址同样的一个session,否则就取不到图片。并且,访问一次图片变一次,所以不要重复访问(验证码重新生成了)。 你这样操作肯定可以:1 用浏览器打开网页2 浏览页面源码,找到参数,如".24566"之类的3 将该参数附缀到URL中,可以直接下载到图片(我验证过)那么你需要在程序中用httpclient模拟这个次序,第一步抓到网页后,从网页中萃取出正确的参数。 楼上几位的方法,早都试过了,都搞不定,才来这里开这个帖子的,大家可直接试下,找到url中直接在浏览器中是打不开的。我用java和net都测试过,获取不到图片。 程序中保持会话的情况下,先访问页面,然后找到页面中的图片的url,再接着访问图片,也是不成的。 之前遇到的问题是,用URL 类能获得 验证码,但是用httpclient时的 getResponseBodyAsStream 返回的时候,转成imageicon 出不来图片,后来发现,用in.avaiable()返回的是空,看解释说,返回0是正常的,然后直接用ByteArrayInputStream 转了一次再用BufferedImage再转一次,然后new ImageIcon 就出来了,还没研究为什么会这样,之前测试jsp时候没有问题,在asp下有这个问题,郁闷啊 如何控制浏览器的后退事件 jsp 防外部注入 高分求救~~!!哪位大侠可以给我一份完整的jsp分页代码(可以在我机器上运行的) 要做一个web浏览历史记录的可视化的程序。 构建web集群的疑问 java 求页面中多选框的处理方法!急! Excel导入数据库:Date类型数据插入mysql数据库时出错,求大神指导 jsp的难题,有点难度!高手来看看!正确马上结贴! 我用struts2上传文件,一直上传不了,求帮忙 问一个程序开发方面的问题? FckEditor导入Word的难题!
URL找对了就行了。
这个页面中的验证码需要一个URL参数来决定验证码,不是随机生成的,倒是有点奇怪。
你通过
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();
这样可以保存图片..希望对您有用哦
这里面它显示的图片,是根据后面的一个参数确定的。如果你随便给个参数的话,那是显示不了图片的。我想这个随便数跟session相关。因此,你重新发请求,去读取这个图片,由于session变了,肯定读不了图片了。
因此,在读取图片时,要使用与前一次访问网页地址同样的一个session,否则就取不到图片。并且,访问一次图片变一次,所以不要重复访问(验证码重新生成了)。
1 用浏览器打开网页
2 浏览页面源码,找到参数,如".24566"之类的
3 将该参数附缀到URL中,可以直接下载到图片(我验证过)那么你需要在程序中用httpclient模拟这个次序,第一步抓到网页后,从网页中萃取出正确的参数。