HttpClient封装工具类
Posted soul-wonder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpClient封装工具类相关的知识,希望对你有一定的参考价值。
1.返回统一格式
public class HttpResult { // 响应的状态码 private int code; // 响应的响应体 private String body; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } }
2.封装HttpClient常用方法
import java.util.ArrayList; import java.util.List; import java.util.Map; 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.HttpDelete; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; 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常用方法 * * @author Wonder * */ public class ApiService { // 每个方法都会用到,提取出来 private CloseableHttpClient httpClient; public ApiService() { this.httpClient = HttpClients.createDefault(); } /** * 不带参数的get * * @param uri * @return * @throws Exception */ public HttpResult doGet(String uri) throws Exception { return this.doGet(uri, null); } /** * 带参数的get请求 * * @param url * @param map * @return * @throws Exception */ public HttpResult doGet(String url, Map<String, Object> map) throws Exception { // 1.创建URIBuilder URIBuilder uriBuilder = new URIBuilder(url); // 2.设置请求参数 if (map != null) { // 遍历请求参数 for (Map.Entry<String, Object> entry : map.entrySet()) { // 封装请求参数 uriBuilder.setParameter(entry.getKey(), entry.getValue().toString()); } } // 3.创建请求对象httpGet HttpGet httpGet = new HttpGet(uriBuilder.build()); // 4.使用httpClient发起请求 CloseableHttpResponse response = this.httpClient.execute(httpGet); // 5.解析返回结果,封装返回对象httpResult // 5.1获取状态码 int code = response.getStatusLine().getStatusCode(); // 5.2 获取响应体 // 使用EntityUtils.toString方法必须保证entity不为空 String body = null; if (response.getEntity() != null) { body = EntityUtils.toString(response.getEntity(), "UTF-8"); } HttpResult result = new HttpResult(); result.setCode(code); result.setBody(body); return result; } /** * 不带参数的post请求 * * @param url * @return */ public HttpResult doPost(String url) throws Exception { return this.doPost(url, null); } /** * 带参数的post请求 * * @param url * @param map * @return * @throws Exception */ public HttpResult doPost(String url, Map<String, Object> map) throws Exception { // 1. 声明httppost HttpPost httpPost = new HttpPost(url); // 2.封装请求参数,请求数据是表单 // 声明封装表单数据的容器 List<NameValuePair> parameters = new ArrayList<NameValuePair>(0); if (map != null) { for (Map.Entry<String, Object> entry : map.entrySet()) { // 封装请求参数到容器中 parameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString())); } } // 创建表单的Entity类 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "UTF-8"); // 3. 把封装好的表单实体对象设置到HttpPost中 httpPost.setEntity(entity); // 4. 使用Httpclient发起请求 CloseableHttpResponse response = this.httpClient.execute(httpPost); // 5. 解析返回数据,封装HttpResult // 5.1状态码 int code = response.getStatusLine().getStatusCode(); // 5.2 响应体内容 String body = null; if (response.getEntity() != null) { body = EntityUtils.toString(response.getEntity(), "UTF-8"); } HttpResult result = new HttpResult(); result.setCode(code); result.setBody(body); return result; } /** * 不带参数的put请求 * * @param url * @return */ public HttpResult doPut(String url) throws Exception { return this.doPut(url, null); } /** * 带参数的put请求 * * @param url * @param map * @return * @throws Exception */ public HttpResult doPut(String url, Map<String, Object> map) throws Exception { // 1. 声明httpput HttpPut httpPut = new HttpPut(url); // 2.封装请求参数,请求数据是表单 if (map != null) { // 声明封装表单数据的容器 List<NameValuePair> parameters = new ArrayList<NameValuePair>(); for (Map.Entry<String, Object> entry : map.entrySet()) { // 封装请求参数到容器中 parameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString())); } // 创建表单的Entity类 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "UTF-8"); // 3. 把封装好的表单实体对象设置到HttpPost中 httpPut.setEntity(entity); } // 4. 使用Httpclient发起请求 CloseableHttpResponse response = this.httpClient.execute(httpPut); // 5. 解析返回数据,封装HttpResult // 5.1状态码 int code = response.getStatusLine().getStatusCode(); // 5.2 响应体内容 String body = null; if (response.getEntity() != null) { body = EntityUtils.toString(response.getEntity(), "UTF-8"); } HttpResult result = new HttpResult(); result.setCode(code); result.setBody(body); return result; } /** * 不带参数的delete * * @param uri * @return * @throws Exception */ public HttpResult doDelete(String uri) throws Exception { return this.doDelete(uri, null); } /** * 带参数的delete * * @param url * @param map * @return * @throws Exception */ public HttpResult doDelete(String url, Map<String, Object> map) throws Exception { // 1.创建URIBuilder URIBuilder uriBuilder = new URIBuilder(url); // 2.设置请求参数 if (map != null) { // 遍历请求参数 for (Map.Entry<String, Object> entry : map.entrySet()) { // 封装请求参数 uriBuilder.setParameter(entry.getKey(), entry.getValue().toString()); } } // 3.创建请求对象httpGet HttpDelete httpDelete = new HttpDelete(uriBuilder.build()); // 4.使用httpClient发起请求 CloseableHttpResponse response = this.httpClient.execute(httpDelete); // 5.解析返回结果,封装返回对象httpResult // 5.1获取状态码 int code = response.getStatusLine().getStatusCode(); // 5.2 获取响应体 // 使用EntityUtils.toString方法必须保证entity不为空 String body = null; if (response.getEntity() != null) { body = EntityUtils.toString(response.getEntity(), "UTF-8"); } HttpResult result = new HttpResult(); result.setCode(code); result.setBody(body); return result; } }
3.测试
import java.util.HashMap; import java.util.Map; import org.junit.Test; public class HttpClientTest { /** * 根据ID来获取数据 * GET * @throws Exception */ @Test public void testGet() throws Exception { ApiService service = new ApiService(); HttpResult result = service.doGet("http://manager.web.com:8079/rest/item/interface/40"); System.err.println("状态码:"+ result.getCode()); System.err.println("数据:"+ result.getBody()); } @Test public void testPut() throws Exception { ApiService service = new ApiService(); String url = "http://manager.web.com:8079/rest/item/interface"; Map<String, Object> map = new HashMap<String, Object>(); map.put("id", "40"); map.put("title", "酷派大神"); HttpResult result = service.doPut(url, map); System.err.println("状态码:"+ result.getCode()); System.err.println("数据:"+ result.getBody()); } }
以上是关于HttpClient封装工具类的主要内容,如果未能解决你的问题,请参考以下文章
轻松把玩HttpClient之封装HttpClient工具类,携带Cookie的请求
轻松把玩HttpClient之封装HttpClient工具类,封装输入参数,简化工具类