httpClient工具类
来源:互联网 发布:淘宝账户如何解绑虾米 编辑:程序博客网 时间:2024/05/22 15:08
httpClient
- 后台中使用http发送请求时需要用到httpclient
- 一般用到的有post和get两种请求方式,post发送形式有两种:
setRequestBody()和setRequestEntity()两者之间的区别,请读者各自查阅资料 - get发送参数,是将参数以key=value的形式拼接到url后面
get的请求参数的大小和浏览器有关
主要用commons-httpclient-3.1的jar包,用maven方式获取:
<dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency>
记录日志用到:org.slf4j
post setRequestBody()方式
PostMethod postMethod = new PostMethod(url);
postMethod.setRequestBody(nameValuePair);post setRequestEntity()方式
PostMethod postMethod = new PostMethod(url);
postMethod.setRequestEntity(new StringRequestEntity(postParam, “”, “UTF-8”));get 发送请求
url += “?” + getParam;
getMethod = new GetMethod(url);
详见代码
package com.xxx.util;import net.sf.json.JSONSerializer;import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.NameValuePair;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.methods.StringRequestEntity;import org.apache.commons.httpclient.params.HttpConnectionParams;import org.apache.commons.httpclient.params.HttpMethodParams;import org.apache.commons.lang.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.*;import java.util.HashMap;import java.util.Map;/** * http请求工具类 * @author weiQiang * @date 2017/7/28 * @email 1107438082@qq.com */public class HttpClientUtils { private static Logger logger = LoggerFactory.getLogger(HttpClientUtils.class); public static final int timeout = 10 * 1000; /** * post请求 * * @param url url * @param param 请求参数 * @return */ public static String httpPostClientServer(String url, Map<String, String> param) { return httpClientServer(url, param, true, timeout, true); } /** * post请求 * * @param url url * @param param 请求参数 * @param timeout 超时时间 * @return */ public static String httpPostClientServer(String url, Map<String, String> param, Integer timeout) { return httpClientServer(url, param, true, timeout, true); } /** * post请求 * * @param url url * @param param 请求参数 * @param postParamType 发送post请求是否使用setRequestEntity默认为true,false为postParamType方式 * @return */ public static String httpPostClientServer(String url, Map<String, String> param, boolean postParamType) { return httpClientServer(url, param, true, timeout, postParamType); } /** * post请求 * * @param url url * @param param 请求参数 * @param timeout 超时时间 * @param postParamType 发送post请求是否使用setRequestEntity默认为true,false为postParamType方式 * @return */ public static String httpPostClientServer(String url, Map<String, String> param, Integer timeout, boolean postParamType) { return httpClientServer(url, param, true, timeout, postParamType); } /** * get请求 * * @param url url * @param param 请求参数 * @return */ public static String httpGetClientServer(String url, Map<String, String> param) { return httpClientServer(url, param, false, timeout); } /** * get请求 * * @param url url * @param param 请求参数 * @param timeout 超时时间 * @return */ public static String httpGetClientServer(String url, Map<String, String> param, Integer timeout) { return httpClientServer(url, param, false, timeout); } /** * 发送请求 * * @param url url * @param param 请求参数 * @param requestType 是否为post * @param timeout 超时时间 * @return */ public static String httpClientServer(String url, Map<String, String> param, boolean requestType, Integer timeout) { return httpClientServer(url, param, requestType, timeout, false); } /** * 发送http请求 * * @param url url * @param param 请求参数 * @param requestType 是否为post * @param timeout 超时时间 * @param postParamType post请求参数类型 发送post请求是否使用setRequestEntity默认为true,false为postParamType方式 * @return */ public static String httpClientServer(String url, Map<String, String> param, boolean requestType, Integer timeout, boolean postParamType) { long beginTime = System.currentTimeMillis(); String result = ""; if (null == param) { param = new HashMap<>(); } logger.info("请求url:{},发送:{}请求,请求大小:{}条", url, requestType ? "post" : "get", param.size()); if (StringUtils.isBlank(url)) { result = "请求url为空"; return result; } if(!url.startsWith("http://")){ url="http://"+url; } HttpClient httpClient = new HttpClient(); PostMethod postMethod = null; GetMethod getMethod = null; InputStream inputStream = null; if (requestType) {//post请求 postMethod = new PostMethod(url); httpClient.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, timeout); NameValuePair[] nameValuePair = new NameValuePair[param.size()]; final int[] i = {0}; param.forEach((key, value) -> { nameValuePair[i[0]] = new NameValuePair(key, value); i[0]++; }); try { //一般接口用以上setRequestBody方法可以接受到值,但是有一些旧接口适用于setRequestEntity的方式接受post参数 if (postParamType) { postMethod.setRequestBody(nameValuePair); } else { String postParam = JSONSerializer.toJSON(param).toString(); if (StringUtils.isNotBlank(postParam)) { postMethod.setRequestEntity(new StringRequestEntity(postParam, "", "UTF-8")); } } postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); httpClient.executeMethod(postMethod); inputStream = postMethod.getResponseBodyAsStream(); } catch (IOException e) { logger.error("请求发生错误:{}", e.getMessage()); } catch (Exception e) { logger.error("请求发生错误:{}", e.getMessage()); } } else {//get请求 StringBuffer getParamBuffer = new StringBuffer(); param.forEach((key, value) -> getParamBuffer.append(key).append("=").append(value).append("&")); if (null != getParamBuffer && getParamBuffer.length() > 0) { getParamBuffer.deleteCharAt(getParamBuffer.length() - 1); } String getParam = getParamBuffer.toString(); url += "?" + getParam; logger.info("Get请求url:{}", url); getMethod = new GetMethod(url); getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); getMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); try { httpClient.executeMethod(getMethod); inputStream = getMethod.getResponseBodyAsStream(); } catch (IOException e) { logger.error("请求发生错误:{}", e.getMessage()); } catch (Exception e) { e.printStackTrace(); logger.error("请求发生错误:{}", e.getMessage()); } } try { if (null == inputStream) { return result; } BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); StringBuilder stringBuilder = new StringBuilder(); String line = ""; while (null != (line = bufferedReader.readLine())) { stringBuilder.append(line); } result = stringBuilder.toString(); } catch (UnsupportedEncodingException e) { logger.error("请求发生UnsupportedEncodingException错误:{}", e.getMessage()); } catch (IOException e) { logger.error("请求发生错误:{}", e.getMessage()); } catch (Exception e) { logger.error("请求发生错误:{}", e.getMessage()); } finally { //释放连接 if (null != postMethod) { postMethod.releaseConnection(); } if (null != getMethod) { getMethod.releaseConnection(); } } logger.info("请求结果大小:{}", result.length()); long endTime = System.currentTimeMillis(); logger.info("请求耗时:{}ms",(endTime-beginTime)); return result; }}
阅读全文
0 0
- Android:HttpClient工具类
- HttpClient 操作工具类---
- httpclient工具类java
- httpclient工具类java
- HttpClient工具类
- HttpClient 操作工具类
- 自定义HttpClient工具类
- HttpClient联网工具类
- HttpClient 操作工具类
- HttpClient工具类
- httpClient工具类
- HttpClient工具类
- httpclient调用工具类
- HttpClient 工具类
- httpClient 工具类
- HttpClient的工具类
- java HttpClient 工具类
- Android 工具类httpClient
- 机器学习与JavaScript(一)
- yaml语言
- [第四季]考试结束
- Mycat中间件
- 八、集合框架
- httpClient工具类
- 剑指offer算法题之单链表的反转--面试题16:反转链表
- js中的ajax和jquery中的ajax学习笔记
- HDU-1045 Fire Net(简单缩点+最大匹配)
- HDU 2068 RPG的错排 (错排+组合数)
- sqlite3触发器的使用
- xargs命令详解
- 【前后缀优化建图+2-SAT】BZOJ3495(PA2010)[Riddle]题解
- MySQL修改存储过程