[Java]Http请求的工具类
2017-10-25 10:35
525 查看
说明
该工具类从网络获取参考,在本人进行工作中,进行了部分修改;
Http请求工具包,包含:
1、常用的GET/POST请求远程接口方法(可带参数、带头部信息);
2、可自定义请求方式的请求远程接口方法(可带参数、带头部信息);
3、可进行文件上传的请求远程接口方法;
具体内容,请大家参阅代码,希望分享出来,为朋友们提供便利;
谢谢。
HttpClientUtils .java
HttpClientUtils .java中涉及的自己封装的结果返回类,ApiResult.java
ApiResult.java中涉及的ResultCode.java
在该工具类中涉及的依赖:
Gradle
Maven
不完善的地方希望大家提建议,谢谢;
该工具类从网络获取参考,在本人进行工作中,进行了部分修改;
Http请求工具包,包含:
1、常用的GET/POST请求远程接口方法(可带参数、带头部信息);
2、可自定义请求方式的请求远程接口方法(可带参数、带头部信息);
3、可进行文件上传的请求远程接口方法;
具体内容,请大家参阅代码,希望分享出来,为朋友们提供便利;
谢谢。
HttpClientUtils .java
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.crm.restapi.result.ApiResult; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.EntityBuilder; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.*; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Map; public class HttpClientUtils { private static PoolingHttpClientConnectionManager cm; private static String EMPTY_STR = ""; private static String UTF_8 = "UTF-8"; private static void init() { if (cm == null) { cm = new PoolingHttpClientConnectionManager(); cm.setMaxTotal(50);// 整个连接池最大连接数 cm.setDefaultMaxPerRoute(5);// 每路由最大连接数,默认值是2 } } /** * 通过连接池获取HttpClient * * @return */ private static CloseableHttpClient getHttpClient() { init(); return HttpClients.custom().setConnectionManager(cm).build(); } /** * @param url * @return */ public static String get(String url) { HttpGet httpGet = new HttpGet(url); return getResult(httpGet); } /** * @param url、params * @return */ public static String get(String url, Map<String, String > params) throws URISyntaxException { URIBuilder ub = new URIBuilder(); ub.setPath(url); ArrayList<NameValuePair> pairs = covertParams2NVPS(params); ub.setParameters(pairs); HttpGet httpGet = new HttpGet(ub.build()); return getResult(httpGet); } /** * @param url、headers、params * @return */ public static String get(String url, Map<String, Object> headers, Map<String, String> params) throws URISyntaxException { URIBuilder ub = new URIBuilder(); ub.setPath(url); if (params != null) { ArrayList<NameValuePair> pairs = covertParams2NVPS(params); ub.setParameters(pairs); } HttpGet httpGet = new HttpGet(ub.build()); for (Map.Entry<String, Object> param : headers.entrySet()) { httpGet.addHeader(param.getKey(), String.valueOf(param.getValue())); } return getResult(httpGet); } /** * @param url * @return */ public static String post(String url) { HttpPost httpPost = new HttpPost(url); return getResult(httpPost); } /** * @param url、params * @return */ public static String post(String url, Map<String, String> params) throws UnsupportedEncodingException { HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(covertParams2NVPS(params), "utf-8"));//设置表单提交编码 // httpPost.setEntity(new StringEntity(JSON.toJSONString(params), ContentType.APPLICATION_FORM_URLENCODED)); return getResult(httpPost); } /** * @param url、headers、params * @return */ public static String post(String url, Map<String, Object> headers, Map<String, String> params) throws UnsupportedEncodingException { HttpPost httpPost = new HttpPost(url); if (params != null) { for (Map.Entry<String, Object> param : headers.entrySet()) { httpPost.addHeader(param.getKey(), String.valueOf(param.getValue())); } } httpPost.setEntity(new StringEntity(JSON.toJSONString(params), ContentType.APPLICATION_JSON)); return getResult(httpPost); } /** * @param method、url * @return */ public static String request(String method, String url) throws UnsupportedEncodingException { RequestBuilder requestBuilder = RequestBuilder.create(method); requestBuilder.setUri(url); return getResult(requestBuilder); } /** * @param method、url、params * @return */ public static String request(String method, String url, Map<String, Object> params) throws UnsupportedEncodingException { RequestBuilder requestBuilder = RequestBuilder.create(method); requestBuilder.setUri(url); EntityBuilder entityBuilder = EntityBuilder.create(); entityBuilder.setContentEncoding(UTF_8); entityBuilder.setText(JSON.toJSONString(params)); entityBuilder.setContentType(ContentType.APPLICATION_FORM_URLENCODED); requestBuilder.setEntity(entityBuilder.build()); return getResult(requestBuilder); } /** * @param method、url、headers、params * @return */ public static String request(String method, String url, Map<String, Object> headers, Map<String, String> params) throws UnsupportedEncodingException { RequestBuilder requestBuilder = RequestBuilder.create(method); requestBuilder.setUri(url); for (Map.Entry<String, Object> param : headers.entrySet()) { requestBuilder.addHeader(param.getKey(), String.valueOf(param.getValue())); } EntityBuilder entityBuilder = EntityBuilder.create(); entityBuilder.setContentEncoding(UTF_8); entityBuilder.setText(JSON.toJSONString(params)); entityBuilder.setContentType(ContentType.APPLICATION_JSON); requestBuilder.setEntity(entityBuilder.build()); return getResult(requestBuilder); } /** * @param url、file、fileName * @return */ public static String uploadFile(String url, byte[] file, String fileName) { HttpPost httpPost = new HttpPost(url); httpPost.setHeader("Accept-Encoding", "gzip"); httpPost.setHeader("charset", "utf-8"); MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create(); multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); multipartEntityBuilder.setCharset(Charset.forName(UTF_8)); multipartEntityBuilder.addBinaryBody("file", file, ContentType.MULTIPART_FORM_DATA, fileName); httpPost.setEntity(multipartEntityBuilder.build()); return getResult(httpPost); } private static ArrayList<NameValuePair> covertParams2NVPS(Map<String, String> params) { ArrayList<NameValuePair> pairs = new ArrayList<NameValuePair>(); for (Map.Entry<String, String> param : params.entrySet()) { if (param.getValue() != null) { pairs.add(new BasicNameValuePair(param.getKey(), param.getValue())); } } return pairs; } /** * 处理Http请求 * * @param request * @return */ private static String getResult(HttpRequestBase request) { // CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = getHttpClient(); try { CloseableHttpResponse response = httpClient.execute(request); // response.getStatusLine().getStatusCode(); HttpEntity entity = response.getEntity(); if (entity != null) { // long len = entity.getContentLength();// -1 表示长度未知 String result = EntityUtils.toString(entity, UTF_8); response.close(); // httpClient.close(); return result; } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } return EMPTY_STR; } /** * 处理Http请求 * * @param requestBuilder * @return */ private static String getResult(RequestBuilder requestBuilder) { // CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = getHttpClient(); try { CloseableHttpResponse response = httpClient.execute(requestBuilder.build()); // response.getStatusLine().getStatusCode(); HttpEntity entity = response.getEntity(); if (entity != null) { // long len = entity.getContentLength();// -1 表示长度未知 String result = EntityUtils.toString(entity, UTF_8); response.close(); // httpClient.close(); return result; } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } return EMPTY_STR; } public static ApiResult toApiRequest(String resultStr) { return JSONObject.parseObject(resultStr, ApiResult.class); } }
HttpClientUtils .java中涉及的自己封装的结果返回类,ApiResult.java
public class ApiResult<T> { public Integer code; public String msg; public T data; public ApiResult success(){ this.code = ResultCode.SUCCESS.getCode(); this.msg = ResultCode.SUCCESS.getDesc(); return this; } public ApiResult success(T data){ this.code = ResultCode.SUCCESS.getCode(); this.msg = ResultCode.SUCCESS.getDesc(); this.data = data; return this; } public ApiResult failure(){ this.code = ResultCode.ERROR.getCode(); this.msg = ResultCode.ERROR.getDesc(); return this; } public ApiResult failure(T data){ this.code = ResultCode.ERROR.getCode(); this.msg = ResultCode.ERROR.getDesc(); this.data = data; return this; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public T getData() { return data; } public void setData(T data) { this.data = data; } }
ApiResult.java中涉及的ResultCode.java
public enum ResultCode { SUCCESS(200, "success"), // 正确请求 ERROR(500, "failure"); // 请求错误 /** 主键 */ private final Integer code; /** 描述 */ private final String desc; ResultCode(final Integer code, final String desc) { this.code = code; this.desc = desc; } public Integer getCode() { return this.code; } public String getDesc() { return this.desc; } }
在该工具类中涉及的依赖:
Gradle
compile "org.apache.httpcomponents:httpcore" compile "org.apache.httpcomponents:httpclient" compile "org.apache.httpcomponents:httpmime" compile "com.alibaba:fastjson:1.2.34"
Maven
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.33</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.5</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.4</version> </dependency>
不完善的地方希望大家提建议,谢谢;
相关文章推荐
- 使用Java原生API编写发送HTTP_POST请求的工具类
- Java Http请求发送工具
- JAVA中HTTP请求参数组织小工具
- Java之请求发送工具类(HttpRequestUtils,百度站长)-yellowcong
- java封装httpClient工具(支持http和https,包含get和post请求)
- Java之请求发送工具类(HttpClientUtils,爬虫)-yellowcong
- java常用的发送http请求的工具方法
- java发送http的get、post请求
- HttpUtil http请求工具,调用第三方接口
- XMLHttpRequest 请求java部署的webservice 跨域问题
- java 写的能够响应浏览器请求的 http 服务器
- java的http中get请求的重发机制
- Java的HttpClient、HttpGet和HttpPost请求
- java apache commons HttpClient发送get和post请求的学习整理
- Java Http网络请求HttpURLConnection应用之【Android网络请求框架底层剖析】
- Postman用法简介-Http请求模拟工具
- Java http请求保存图片至本地
- Java中发送http的get、post请求
- Java HttpURLConnection模拟请求Rest接口解决中文乱码问题
- [Java]随记--HttpClient发送put请求