HttpClient4.3 使用经验(一) 简单使用

原创 2015年11月20日 12:01:09
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;
	}
	
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

HttpClient4.3的简单使用

最近在研究HttpClient的使用,简单写了这个测试类,来了解下HttpClient的使用 主要的流程是配置HttpClientBuilder的连接池管理,cookie,User-Agent,So...
  • jcbms
  • jcbms
  • 2017年03月30日 20:40
  • 1180

【一】HttpClient4.3.1简单入门实例

1、先看一下示例代码 [java] view plaincopy public class HttpClientTest {       publ...
  • z69183787
  • z69183787
  • 2015年09月11日 14:27
  • 1093

HTTPClient4.3的典型小例子

三个简单的HTTPClient4.3小例子 写三个httpclient的小例子,希望对刚开始学习httpclient的小伙伴们有一个参考↖(^ω^)↗      1、简单的获取一个HTML...
  • z69183787
  • z69183787
  • 2015年09月11日 15:22
  • 1431

greenDAO简单使用经验

最近在对开发项目的性能进行优化。由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读写、查询等操作。因此首先想到了对整个项目的数据库框架进行优化。 原先使用android本身内置的s...
  • i_lovefish
  • i_lovefish
  • 2014年06月11日 22:14
  • 35898

greenDAO简单使用经验

最近在对开发项目的性能进行优化。由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读写、查询等操作。因此首先想到了对整个项目的数据库框架进行优化。 原先使用android本身内置的s...
  • shuitawuhen
  • shuitawuhen
  • 2015年11月06日 14:25
  • 1056

Redis使用经验

首先,缓存的对象有三种: 1:数据库中单条的的数据(以表名跟id作为key永久保存到Redis),在有更新的地方都要更新缓存(不适用于需要经常更新的数据); 2:对于一些不分页,不需要实时(需要多...
  • LWJdear
  • LWJdear
  • 2017年05月26日 10:15
  • 220

mybatis使用经验

1、jdbcType问题 mybatis3的报错: org.apache.ibatis.exceptions.PersistenceException : ### Error updating dat...
  • bsxb5200
  • bsxb5200
  • 2013年12月19日 14:10
  • 1234

mongo使用经验谈

1.mongodb 的查询每次只能用到一个索引 对于较复杂的表结构,可能会导致你频频使用联合索引。 但记住: 1)mongodb 单表最大索引数为 64 。 2)索引越多,插入...
  • booooooooooooooooooo
  • booooooooooooooooooo
  • 2013年12月12日 00:39
  • 1152

Netty使用经验

以前项目中使用的是Netty3.2.x版本。写这篇文章的时候,看的是Netty3.6.6.Final跟4.0.0.CR3版本,Linux环境。4.0的API跟3.x有一些区别,互不兼容。在公开的API...
  • xeseo
  • xeseo
  • 2013年10月17日 11:09
  • 1525

Spring学习经验总结

Bean的作用范围 .singleton 默认的形式,在Spring的IOC容器中默认情况下只有一个对象的实例。 .prototype 每次从容器中获取的bean都是新的对象。 .request .r...
  • wangyang1354
  • wangyang1354
  • 2015年09月03日 21:42
  • 973
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HttpClient4.3 使用经验(一) 简单使用
举报原因:
原因补充:

(最多只允许输入30个字)