微信二维码|头像下载器
来源:互联网 发布:美篇同类软件 编辑:程序博客网 时间:2024/04/30 01:07
前段时间朋友让我帮他找一个能够批量下载大量的微信的头像和二维码,找了半天没有发现合适的工具,于是自己写了一个原生的下载器,并且完成了从单线程到多线程的升级工作,分享给大家,望大家多多指点。
单线程示例:
package com.forlink.etrade.web.sso;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import org.apache.commons.httpclient.Header;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.poi.xssf.usermodel.XSSFCell;import org.apache.poi.xssf.usermodel.XSSFRow;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;/** * 腾讯二维码下载器 * @author wanghjbuf * @addr http://blog.csdn.net/wanghjbuf */public class QrCodeDownloader { /** * 下载操作 * 2016年12月31日 */ private static void download(String qrCodeAddress,String filename) throws Exception{ HttpClient client = new HttpClient(); if("".equals(qrCodeAddress)){ throw new Exception("二维码地址不存在,操作失败!"); } GetMethod method=new GetMethod(qrCodeAddress); try { //解除腾讯的安全限制 Header accept = new Header("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); Header accept_encoding = new Header("Accept-Encoding","gzip, deflate, sdch"); Header accept_language = new Header("Accept-Language","zh-CN,zh;q=0.8"); Header connection = new Header("Connection","keep-alive"); Header host = new Header("Host","open.weixin.qq.com"); Header insecure = new Header("Upgrade-Insecure-Requests","1"); Header user_agent = new Header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"); Header referer = new Header("Referer","https://mp.weixin.qq.com/"); method.setRequestHeader(accept); method.setRequestHeader(accept_encoding); method.setRequestHeader(accept_language); method.setRequestHeader(connection); method.setRequestHeader(host); method.setRequestHeader(insecure); method.setRequestHeader(user_agent); method.setRequestHeader(referer); client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { byte[] imgByte = method.getResponseBody(); InputStream in = new ByteArrayInputStream(imgByte); //TODO 下载地址可以定制 File file=new File("C:\\Users\\whj\\Desktop\\pic",filename+".png"); FileOutputStream fos=new FileOutputStream(file); byte[] b = new byte[1024];//支持1M图片缓存区 int nRead = 0; while ((nRead = in.read(b)) != -1) { fos.write(b, 0, nRead); } fos.flush(); fos.close(); in.close(); }else{ throw new Exception("网络状态错误!"); } } catch (Exception e) { e.printStackTrace(); }finally { method.releaseConnection(); } } public static void main(String []args){ try{InputStream stream = new FileInputStream("C:\\Users\\whj\\Desktop\\lll.xlsx"); XSSFWorkbook xssfWorkbook = new XSSFWorkbook(stream); XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0); int rowEnd = xssfSheet.getLastRowNum(); for(int i=1;i<=rowEnd;i++){ String qrCodeAddress="",fileName=""; XSSFRow row = xssfSheet.getRow(i); if(null == row) continue; XSSFCell cellFileName = row.getCell(3); XSSFCell cellQrCodeAddress = row.getCell(5); if(null==cellFileName || null==cellQrCodeAddress) continue; fileName=cellFileName.getStringCellValue(); qrCodeAddress=cellQrCodeAddress.getStringCellValue(); System.out.println(i+":befor>>filename:"+fileName+";qrCodeAddress"+qrCodeAddress); download(qrCodeAddress,fileName); System.out.println(i+":after>>filename:"+fileName+";qrCodeAddress"+qrCodeAddress); Thread.sleep(1000); } stream.close(); }catch(Exception e){ e.printStackTrace(); } }}
多线程示例:
package com.forlink.etrade.web.sso;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import org.apache.commons.httpclient.Header;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.poi.xssf.usermodel.XSSFCell;import org.apache.poi.xssf.usermodel.XSSFRow;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;/** * 腾讯二维码下载器 * @author wanghjbuf * @addr http://blog.csdn.net/wanghjbuf */public class QrCodeDownloader2 { /** * 下载操作 * 2016年12月31日 */ private void download(String qrCodeAddress,String filename) throws Exception{ HttpClient client = new HttpClient(); if("".equals(qrCodeAddress)){ throw new Exception("二维码地址不存在,操作失败!"); } GetMethod method=new GetMethod(qrCodeAddress); try { //解除腾讯的安全限制 Header accept = new Header("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); Header accept_encoding = new Header("Accept-Encoding","gzip, deflate, sdch"); Header accept_language = new Header("Accept-Language","zh-CN,zh;q=0.8"); Header connection = new Header("Connection","keep-alive"); Header host = new Header("Host","open.weixin.qq.com"); Header insecure = new Header("Upgrade-Insecure-Requests","1"); Header user_agent = new Header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"); Header referer = new Header("Referer","https://mp.weixin.qq.com/"); method.setRequestHeader(accept); method.setRequestHeader(accept_encoding); method.setRequestHeader(accept_language); method.setRequestHeader(connection); method.setRequestHeader(host); method.setRequestHeader(insecure); method.setRequestHeader(user_agent); method.setRequestHeader(referer); client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { byte[] imgByte = method.getResponseBody(); InputStream in = new ByteArrayInputStream(imgByte); File file=new File("C:\\Users\\whj\\Desktop\\pic",filename+".png");//下载地址定制 FileOutputStream fos=new FileOutputStream(file); byte[] b = new byte[1024];//支持1M图片缓存区 int nRead = 0; while ((nRead = in.read(b)) != -1) { fos.write(b, 0, nRead); } fos.flush(); fos.close(); in.close(); }else{ throw new Exception("网络状态错误!"); } } catch (Exception e) { e.printStackTrace(); }finally { method.releaseConnection(); } } public static void main(String []args){ try{ new QrCodeDownloader2().handel(); }catch(Exception e){ e.printStackTrace(); } } private final int download_gip = 10; private int index = 1; private int Max_index = 1; private XSSFSheet xssfSheet; private InputStream stream; private XSSFWorkbook xssfWorkbook; public void handel() throws Exception{ stream = new FileInputStream("C:\\Users\\whj\\Desktop\\lll.xlsx"); xssfWorkbook = new XSSFWorkbook(stream); xssfSheet = xssfWorkbook.getSheetAt(0); Max_index = xssfSheet.getLastRowNum(); new downloadThread().start();//可拓展线程数 new downloadThread().start(); new downloadThread().start(); new downloadThread().start(); } public synchronized String[] getFileMission() throws Exception{ return getMission(); } private String[] getMission() throws Exception{ if (index%download_gip == 0) { Thread.sleep(1000);} XSSFRow row = xssfSheet.getRow(index); index++; if(null == row) return null; XSSFCell cellFileName = row.getCell(3); XSSFCell cellQrCodeAddress = row.getCell(5); if(null==cellFileName || null==cellQrCodeAddress) return index == Max_index ? null:getMission(); return new String[]{cellFileName.getStringCellValue(),cellQrCodeAddress.getStringCellValue()}; } @Overrideprotected void finalize() throws Throwable {stream.close();super.finalize();} class downloadThread extends Thread{ @Overridepublic void run(){try{super.run();String[] fileMission = getFileMission();while(fileMission != null){System.out.println(":befor>>filename:"+fileMission[0]+";qrCodeAddress"+fileMission[1]); download(fileMission[1],fileMission[0]); System.out.println(":after>>filename:"+fileMission[0]+";qrCodeAddress"+fileMission[1]); fileMission = getFileMission();//获取下一个任务}}catch(Exception e){e.printStackTrace();}} }}
*如有疑问,欢迎技术交流,私人微信wanghjbuf,非诚勿扰
1 0
- 微信二维码|头像下载器
- 微信二维码扫描下载APK
- 微信生成公众号带参数二维码加上用户头像(二)
- 微信生成公众号带参数二维码用户头像 加上文字生成图片(三)
- 微信上传头像
- 微信公众号二维码下载,php开发公众号下载二维码
- APP二维码微信扫描后无法下载的问题
- 微信二维码扫描无法下载APK文件
- 一个二维码扫描自动识别下载应用【微信提示】
- APP二维码微信扫描后无法下载的问题
- 使用php发送自定义背景、头像、文字的二维码海报并带有提示的微信消息
- 微信公众号点击分享生成分享的图片,可以调整二维码,头像,昵称到背景图指定位置
- 微信解析二维码
- 微信二维码生成
- 微信支付--二维码
- 微信生成二维码
- 微信二维码生成
- 微信 二维码生成
- 服务器之weblogic
- 快速Android开发框架
- 解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题
- jQuery实战3:菜单效果
- IDA反汇编/反编译静态分析iOS模拟器程序系列
- 微信二维码|头像下载器
- 209. Minimum Size Subarray Sum
- 用CMD或者bat修改host文件
- ssl,ftp远程登录
- string::size_type 的理解
- iOS动画案例 类似于qq账号信息里的一个动画
- 网页中历史记录的实现
- JVM内幕:Java虚拟机详解
- jquery的checkbox,radio,select等方法总结