某网页上的验证码图片的src="goform/vcode?t=1465547411559",每次点击更换验证码按钮,src中后面那串数字会变化,利用下面方法传入src下载得到的文件是空的,方法如图:
请教各位大神,如何才能下载验证码图片到本地,最好可以给个示例,谢谢!
参考下这个
//new一个URL对象 URL url = new URL("http://img.hexun.com/2011-06-21/130726386.jpg"); //打开链接 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置请求方式为"GET" conn.setRequestMethod("GET"); //超时响应时间为5秒 conn.setConnectTimeout(5 * 1000); //通过输入流获取图片数据 InputStream inStream = conn.getInputStream(); //得到图片的二进制数据,以二进制封装得到数据,具有通用性 byte[] data = readInputStream(inStream); //new一个文件对象用来保存图片,默认保存当前工程根目录 File imageFile = new File("BeautyGirl.jpg"); //创建输出流 FileOutputStream outStream = new FileOutputStream(imageFile); //写入数据 outStream.write(data); //关闭输出流 outStream.close();
我试了下,不行,好像跟src有关系,我的这个src好像不是图片地址,像是一个方法调用
@linxiyun2008: 验证码的地址跟你这个类似,你查看一下
你看下真实的场景下,那个验证码图片对应的请求明细。你模拟请求的时候,最好带上全部的信息。
你的writer即没有flush()也没有close(), 貌似东西没写进去啊...
额, 给你一个我写过的down验证码的方法, 拽的是我们学校的一个登录界面的验证码
在android上也能跑, 应该没问题的...
1 public void getCaptcha(File file) throws IOException { 2 URL url = new URL(HOST + CAPTCHA_SUFFIX); 3 URLConnection urlConnection = url.openConnection(); 4 urlConnection.setRequestProperty("Cookie", "JSESSIONID="+JSESSIONID); 5 urlConnection.connect(); 6 InputStream inputStream = urlConnection.getInputStream(); 7 byte[] bytes = new byte[1024]; 8 FileOutputStream fileOutputStream = new FileOutputStream(file); 9 int LENGTH; 10 while ((LENGTH = inputStream.read(bytes)) != -1){ 11 fileOutputStream.write(bytes, 0, LENGTH); 12 } 13 inputStream.close(); 14 fileOutputStream.close(); 15 }
多余的东西请无视...
来源: https://github.com/hwding/libXDUQuery/blob/master/src/FooPackage/ECard.java
|