微信二维码|头像下载器

来源:互联网 发布:美篇同类软件 编辑:程序博客网 时间: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
原创粉丝点击