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 xmlContent =null;
		File file = new File(filename);
		BufferedReader reader =null;
		try {
			if(!file.exists()){
				 new RuntimeException("文件不存在");
				 return xmlContent;
			}
			StringBuilder buider = new StringBuilder();
			String readata ="";
			reader = new BufferedReader(new FileReader(file));
			while(true){
				readata = reader.readLine();
				if(readata==null){
					break;
				}
				buider.append(readata).append("\n");
			}
			xmlContent=buider.toString();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}finally{
			if(reader!=null)
				reader.close();
		}
		return xmlContent;
	}
	
	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;
	}
	
}

 

你可能感兴趣的:(httpclient)