你的位置:首页 > Java教程

[Java教程]HttpClient4.3 使用经验(一) 简单使用


package com.wp.nevel.base.utils;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.net.SocketException;import java.net.UnknownHostException;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Map.Entry;import org.apache.http.HttpEntity;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.utils.URLEncodedUtils;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicNameValuePair;import org.apache.http.protocol.HttpContext;import org.apache.http.util.EntityUtils;import org.apache.log4j.Logger;import org.junit.Test;import com.wp.nevel.base.exception.ParserException;import com.wp.nevel.base.service.impl.LogServiceHelp;public class HttpClientUtils {  public static Logger logger = Logger.getLogger( LogServiceHelp.class);    private static HttpClient httpclient;  static {    httpclient = HttpClients.createDefault();  }    @Test  public void test(){    String url="http://www.shuchongw.com/files/article/html/23/23114/index.html";    doGetHtmlContent2byte(url);  }        /**   * 根据简单url获取网页数据,转换成byte [] 存储   * */  public static byte[] doGetHtmlContent2byte(String url) {    CloseableHttpResponse response = null;    byte[] resultByte = {};    try {      HttpGet get = new HttpGet(url);      System.out.println(url);      RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(30000).setConnectTimeout(30000).build();      get.setConfig(requestConfig);      try {        response = (CloseableHttpResponse) HttpClientUtils.httpclient.execute(get);      } catch (UnknownHostException e) {        e.printStackTrace();          logger.info("链接主网失败");      }      int statusCode = response.getStatusLine().getStatusCode();      System.out.println(statusCode);      if (statusCode == 200) {        HttpEntity entity = response.getEntity();        resultByte = EntityUtils.toByteArray(entity);      }    } catch (ClientProtocolException e) {      e.printStackTrace();    } catch (SocketException e) {      e.printStackTrace();    }catch(IOException e){      e.printStackTrace();    } finally {      try {        if(response!=null){          response.close();        }      } catch (IOException e) {        e.printStackTrace();      }    }    return resultByte;  }    /**   * 根据复杂url获取网页数据,转换成byte [] 存储   * @throws ParserException   * @throws IOException   * @throws UnknownHostException   * @throws ClientProtocolException   * @throws SocketException   * */  public static byte [] doGetHtmlByParams2Byte(Map<String, String> params, String paramsEncoding, String url) {    if (params != null) {      List<NameValuePair> formparams = new ArrayList<NameValuePair>();      for (Entry<String, String> entry : params.entrySet()) {        formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));      }      if (!formparams.isEmpty()) {        String paramsStr = URLEncodedUtils.format(formparams, paramsEncoding!=null?paramsEncoding:"utf-8");        url = url + "?" + paramsStr;      }    }    return doGetHtmlContent2byte(url);  }    /**   * 根据复杂url获取网页数据,转换成String 存储   * @throws ParserException   * @throws IOException   * @throws UnknownHostException   * @throws ClientProtocolException   * @throws SocketException   * */  public static String doGetHtmlByParams2Text(Map<String, String> params, String paramsEncoding, String url,String htmlEncoding) throws ClientProtocolException, UnknownHostException, SocketException{    try {      return getHtmlContentByText(doGetHtmlByParams2Byte(params,paramsEncoding,url),htmlEncoding!=null?htmlEncoding:"utf-8");    } catch (Exception e) {      e.printStackTrace();      return "";    }  }    /**   * 根据简单url获取网页数据,转换成String 存储   * @throws ParserException   * @throws IOException   * @throws UnknownHostException   * @throws ClientProtocolException   * @throws SocketException   * */  public static String doGetHtmlContentToString(String url, String encoding){    try {      return getHtmlContentByText(doGetHtmlContent2byte(url),encoding);    } catch (Exception e) {      e.printStackTrace();      return "";    }  }  /**   * 根据简单url获取网页图片数据, 保存路径[saveImagePath]   * @throws ParserException   * @throws IOException   * @throws UnknownHostException   * @throws ClientProtocolException   * @throws SocketException   * */  public static void getHtml2Image(String url,String saveImagPath){    try {      downloadData(doGetHtmlContent2byte(url),saveImagPath);    } catch (Exception e) {      e.printStackTrace();    }  }    public static String getHtmlContentByText(byte [] htmlBytes, String encoding){    try {      return new String (htmlBytes,encoding!=null?encoding:"utf-8");    } catch (UnsupportedEncodingException e) {      e.printStackTrace();      return "";    }  }      /**   * 执行下载io   *   * @param byte [] data 网页字节流,filename 存储地址和文件名 return   * */  public static void downloadData(byte[] data, String filename) {    try {      DataOutputStream writer = new DataOutputStream(          new FileOutputStream(new File(filename)));      BufferedOutputStream out = new BufferedOutputStream(writer);      out.write(data);      out.flush();      out.close();    } catch (FileNotFoundException e) {      e.printStackTrace();    } catch (IOException e) {      e.printStackTrace();    }  }    public static String readFile(String filename) throws IOException{    String =null;    File file = new File(filename);    BufferedReader reader =null;    try {      if(!file.exists()){         new RuntimeException("文件不存在");         return = new StringBuilder();      String readata ="";      reader = new BufferedReader(new FileReader(file));      while(true){        readata = reader.readLine();        if(readata==null){          break;        }        buider.append(readata).append("\n");      }      =buider.toString();    } catch (FileNotFoundException e) {      e.printStackTrace();    }finally{      if(reader!=null)        reader.close();    }    return public static byte [] doGetByteByHttpclient2Url(HttpContext httpContext,CloseableHttpClient client,String url){    byte [] resultBytes = null;    try {      HttpGet get = new HttpGet(url);      CloseableHttpResponse response =client.execute(get, httpContext);      int status = response.getStatusLine().getStatusCode();      System.out.println("链接状态="+status);      if(status!=200)        return resultBytes;      HttpEntity entity = response.getEntity();      resultBytes = EntityUtils.toByteArray(entity);    } catch (ClientProtocolException e) {      throw new RuntimeException("失败连接地址"+url, e);    } catch (IOException e) {      throw new RuntimeException("失败连接地址"+url, e);    }    if(resultBytes==null){      try {        Thread.sleep(2000);      } catch (InterruptedException e) {        e.printStackTrace();      }    }    return resultBytes;  }  }