`
ak23173969
  • 浏览: 29453 次
社区版块
存档分类
最新评论

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;
	}
	
}

 

分享到:
评论

相关推荐

    httpclient4.3工具类

    总结起来,`httpclient4.3工具类`是一个针对HttpClient 4.3的自定义包装,它封装了常见的HTTP操作,提供了便捷的接口供项目中使用。理解这个工具类的内部实现和HttpClient的核心概念,将有助于更好地利用它进行HTTP...

    httpClient4.3 Jar包 demo

    在这个"httpClient4.3 Jar包 demo"中,你将找到HttpClient 4.3的jar文件以及相关的示例代码,对于学习和理解HttpClient的使用非常有帮助。 HttpClient 4.3主要知识点包括: 1. **基础概念**: - **HttpClient对象...

    HttpClient4.3需要的jar

    HttpClient 4.3是一个重要的版本,它提供了许多改进和新特性,使得开发者可以更高效、更灵活地与Web服务器进行交互。这个压缩包包含了HttpClient 4.3版本所需的jar文件和其他依赖库,以确保能够正确运行基于...

    httpclient 4.3 中文版

    ### HttpClient 4.3 中文版相关知识点 #### 一、概述 Apache HttpClient 是一个用于构建 HTTP 客户端的应用程序编程接口 (API),属于 Apache Jakarta Commons 的一部分。该库支持 HTTP 协议的最新标准,并提供了...

    HttpClient 4.3教程.rar

    本教程将详细介绍HttpClient 4.3的主要特性和使用方法。 一、HttpClient简介 HttpClient是一个Java库,它允许开发人员执行HTTP和HTTPS请求,并处理响应。它支持各种HTTP方法(如GET、POST、PUT、DELETE等),提供了...

    httpclient4.3中文教程

    HttpClient 4.3 是 Apache 开源组织提供的一个用于构建 HTTP 客户端应用程序的强大库,主要专注于 HTTP 协议的实现。它建立在 HttpCore 库之上,支持传统的阻塞 I/O 模型,适用于各种需要高效、可控的 HTTP 交互的...

    HttpClient4.3模拟登陆新版12306

    下面是一个简单的HttpClient 4.3模拟登录12306的代码片段,展示如何构造和发送请求: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet getMethod = new HttpGet(...

    HttpClient4.3教程 PDF格式

    在使用HttpClient之前,需要了解它并不是一个完整的浏览器或服务器,而是一个用于HTTP通信的客户端。它主要负责发送和接收HTTP消息,但不涉及消息内容的处理,比如JavaScript解析或内容类型(contentType)的关心等...

    httpclient 4.5 api文档

    - 使用CloseableHttpClient替代HttpClient。 - 调用close()方法关闭连接。 ##### 1.3 HTTP执行上下文 - **定义**:执行HTTP请求时使用的上下文,用于存储各种状态信息。 - **作用**:允许开发者在请求过程中注入...

    HttpClient接口调用工具类(附带demo)

    在HttpClient中,你可以通过`HttpPost`类来创建一个POST请求,然后使用`setEntity`方法添加请求体。最后,通过`HttpClient`的`execute`方法发送请求并获取响应。 2. **Get请求**: Get请求是最简单的HTTP请求,...

    HttpClient-All-jar-4.3

    这个HttpClient-All-jar-4.3版本是HttpClient的一个重要里程碑,包含了4.3版本的所有功能和修复。下面将详细讨论HttpClient的核心概念、主要功能、配置方法以及常见用法。 HttpClient 4.3版本引入了多项改进和优化...

    HttpClient 发送get和post请求

    一个简单的易学的 基于HttpClient 4.3发送psot及get请求,返回数据,适合初学者,适合初学者

    httpClient实例httpClient调用 http/https实例 忽略SSL验证

    要创建一个简单的HttpClient实例,你需要以下步骤: 1. 引入Apache HttpClient库: 在你的项目中,确保已经添加了Apache HttpClient的依赖。例如,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```...

    httpclient下载文件

    apache httpclient 的几个简单封装,基于httpclient4.3. 示例代码: long len = HttpUtil.download("http://localhost/upload/817.mov", "D:/test.mov"); 内部含有源码jar和lib,请翻阅 httpdownloadutil.jar

    httpClient使用指南最新版

    ### HttpClient 使用指南知识点详解 #### 一、概述与基本概念 **1.1 请求执行** - **1.1.1 HTTP请求**: 在客户端发起HTTP请求时,需要构造一个`HttpRequest`对象,它包含了请求方法(如GET、POST)、请求URL等...

    HTTPClient

    HttpClient 4.3引入了一个新的构建器模式,这使得配置更加灵活和方便: ```java CloseableHttpClient httpClient = HttpClients.custom() .setDefaultRequestConfig(RequestConfig.custom() .setConnectTimeout...

    使用HttpClient获取网页html源代码.zip

    在这个名为"使用HttpClient获取网页html源代码.zip"的压缩包中,包含了一个简单的示例项目——WebDataShow,用于演示如何使用HttpClient获取网页HTML。 首先,我们需要导入Apache HttpClient库。在Android Studio中...

    httpclient.zip

    了解并熟练掌握HttpClient的使用,对于提升Java应用程序的网络通信能力至关重要。 HttpClient是由Apache软件基金会开发的开源项目,主要用于执行HTTP请求,支持从简单的GET和POST操作到复杂的HTTP协议特性的完整...

    httpclient安卓版

    HttpClient的设计目标是为复杂的HTTP应用提供一个简单、一致的API。 二、HttpClient在Android中的挑战 在Android平台上,HttpClient自API级别23(Android 6.0)起被标记为过时,而从API级别26(Android 8.0)开始...

    Android学习之HttpClient练习(一)

    在实践过程中,可以参考压缩包中的`2014.11.3HttpClient练习(一)`文件,它可能包含了一个简单的HttpClient使用示例,通过运行和调试这个例子,可以帮助你更好地理解和掌握HttpClient的用法。 总之,HttpClient在...

Global site tag (gtag.js) - Google Analytics