httpclient工具类封装

  • HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便
  • HttpClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等等,
  • HttpClient实际上是对Java提供方法的一些封装,在HttpURLConnection中的输入输出流操作,在这个接口中被统一封装成了HttpPost(HttpGet)和HttpResponse,这样,就减少了操作的繁琐性

导入maven的依赖

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.3</version>
</dependency>

下面是使用CloseableHttpClient封装的工具类

package cn.sfn.common.utils;

import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
/**
 * httpClient工具类
 *
 */
public class HttpUtil {
	/**
	 * 处理http请求
	 * @param requestUrl 为请求地址
	 * @param requestMethod 请求方式,值为"GET"或"POST"
	 * @param param http请求需要带的参数
	 * @return
	 */
	public static String httpRequest(String requestUrl,String requestMethod,Map<String, Object> param){
		//响应返回结果
		String resultString = "";
		if(StringUtils.isBlank(requestUrl) || StringUtils.isBlank(requestMethod)) {
			return resultString;
		}
		//get方式请求
		if("get".equals(requestMethod.toLowerCase())) {
			resultString = doGet(requestUrl, param);
		}
		//get方式请求
		if("post".equals(requestMethod.toLowerCase())) {
			resultString = doPost(requestUrl, param);
		}
		return resultString;
	}

	/**
	 * get请求处理
	 * @param url
	 * @param param
	 * @return
	 */
	public static String doGet(String url, Map<String, Object> param) {
		//创建默认的httpClient实例
		CloseableHttpClient httpClient = HttpClients.createDefault();
		//httpResponse响应对象
		CloseableHttpResponse response = null;
		//响应返回结果
		String resultString = "";
		try {
			//创建uri
			URIBuilder builder = new URIBuilder(url);
			if (param != null) {
				for (String key : param.keySet()) {
					builder.addParameter(key, String.valueOf(param.get(key)));
				}
			}
			URI uri = builder.build();
			// 创建http GET请求
			HttpGet httpGet = new HttpGet(uri);
			// 执行请求
			response = httpClient.execute(httpGet);
			// 判断返回状态是否为200
			if (response!=null && response.getStatusLine().getStatusCode() == 200) {//响应状态
				// 获取响应实体
				HttpEntity httpEntity = response.getEntity();
				resultString = EntityUtils.toString(httpEntity,"UTF-8");//以utf-8编码返回
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (response != null) {
					response.close();
				}
				httpClient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return resultString;
	}

	/**
	 *  post请求处理
	 * @param url
	 * @param param
	 * @return
	 */
	public static String doPost(String url, Map<String, Object> param) {
		//创建默认的httpClient实例
		CloseableHttpClient httpClient = HttpClients.createDefault();
		//httpResponse响应对象
		CloseableHttpResponse response = null;
		//响应返回结果
		String resultString = "";
		try {
			// 创建Http Post请求
			HttpPost httpPost = new HttpPost(url);
			// 创建参数列表
			if (param != null) {
				List<NameValuePair> formParams = new ArrayList<NameValuePair>();
				for (String key : param.keySet()) {
					formParams.add(new BasicNameValuePair(key, String.valueOf(param.get(key))));
				}
				// 模拟表单
				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams,"UTF-8");
				httpPost.setEntity(entity);
			}
			//执行http请求
			response = httpClient.execute(httpPost);
			//获取响应结果
			// 判断返回状态是否为200
			if (response!=null && response.getStatusLine().getStatusCode() == 200) {//响应状态
				resultString = EntityUtils.toString(response.getEntity(),"UTF-8");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (response != null) {
					response.close();
				}
				httpClient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return resultString;
	}
}

下面是使用HttpURLConnection封装的工具类

public class HttpUtil {
	/**
	 * 处理http请求
	 * @param requestUrl 为请求地址
	 * @param requestMethod 请求方式,值为"GET"或"POST"
	 * @param outputStr 往服务器端写内容 也就是发起http请求需要带的参数
	 * @return
	 */
	public static String httpRequest(String requestUrl,String requestMethod,String outputStr){
		StringBuffer buffer=null;
		URL url = null;
		HttpURLConnection conn = null;
		BufferedInputStream fis = null;
		OutputStream os = null;
		try{
		    url=new URL(requestUrl);
			conn=(HttpURLConnection)url.openConnection();
			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.setRequestMethod(requestMethod);//设置提交方法
			conn.connect();
			//往服务器端写内容 也就是发起http请求需要带的参数
			if(null!=outputStr){
			    os=conn.getOutputStream();
				os.write(outputStr.getBytes("utf-8"));
			}
			//读取服务器端返回的内容
			fis = new BufferedInputStream(conn.getInputStream());
			InputStreamReader isr=new InputStreamReader(fis,"utf-8");
			BufferedReader br=new BufferedReader(isr);
			buffer=new StringBuffer();
			String line=null;
			while((line=br.readLine())!=null){
				buffer.append(line);
			}
		}catch(Exception e){
			e.printStackTrace();
		} finally {
			if(fis!=null) {
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(os!=null) {
				try {
					os.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return buffer.toString();
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值