httpclient4.3 工具类
2016-03-26 12:49
405 查看
httpclient4.3 java工具类。
。。
。因项目须要开发了一个工具类。正经常常使用的httpclient 请求操作应该都够用了
工具类下载地址:http://download.csdn.net/detail/ruishenh/7421641
。。
。因项目须要开发了一个工具类。正经常常使用的httpclient 请求操作应该都够用了
工具类下载地址:http://download.csdn.net/detail/ruishenh/7421641
package com.ruishenh.utils; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.httpclient.HttpStatus; import org.apache.http.HttpEntity; import org.apache.http.HttpException; import org.apache.http.HttpResponse; 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.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; public class HttpClientUtils { /** * 连接超时时间 */ public static final int CONNECTION_TIMEOUT_MS = 360000; /** * 读取数据超时时间 */ public static final int SO_TIMEOUT_MS = 360000; public static final String CONTENT_TYPE_JSON_CHARSET = "application/json;charset=gbk"; public static final String CONTENT_TYPE_XML_CHARSET = "application/xml;charset=gbk"; /** * httpclient读取内容时使用的字符集 */ public static final String CONTENT_CHARSET = "GBK"; public static final Charset UTF_8 = Charset.forName("UTF-8"); public static final Charset GBK = Charset.forName(CONTENT_CHARSET); /** * 简单get调用 * * @param url * @param params * @return * @throws ClientProtocolException * @throws IOException * @throws URISyntaxException */ public static String simpleGetInvoke(String url, Map<String, String> params) throws ClientProtocolException, IOException, URISyntaxException { return simpleGetInvoke(url, params,CONTENT_CHARSET); } /** * 简单get调用 * * @param url * @param params * @return * @throws ClientProtocolException * @throws IOException * @throws URISyntaxException */ public static String simpleGetInvoke(String url, Map<String, String> params,String charset) throws ClientProtocolException, IOException, URISyntaxException { HttpClient client = buildHttpClient(false); HttpGet get = buildHttpGet(url, params); HttpResponse response = client.execute(get); assertStatus(response); HttpEntity entity = response.getEntity(); if (entity != null) { String returnStr = EntityUtils.toString(entity,charset); return returnStr; } return null; } /** * 简单post调用 * * @param url * @param params * @return * @throws URISyntaxException * @throws ClientProtocolException * @throws IOException */ public static String simplePostInvoke(String url, Map<String, String> params) throws URISyntaxException, ClientProtocolException, IOException { return simplePostInvoke(url, params,CONTENT_CHARSET); } /** * 简单post调用 * * @param url * @param params * @return * @throws URISyntaxException * @throws ClientProtocolException * @throws IOException */ public static String simplePostInvoke(String url, Map<String, String> params,String charset) throws URISyntaxException, ClientProtocolException, IOException { HttpClient client = buildHttpClient(false); HttpPost postMethod = buildHttpPost(url, params); HttpResponse response = client.execute(postMethod); assertStatus(response); HttpEntity entity = response.getEntity(); if (entity != null) { String returnStr = EntityUtils.toString(entity, charset); return returnStr; } return null; } /** * 创建HttpClient * * @param isMultiThread * @return */ public static HttpClient buildHttpClient(boolean isMultiThread) { CloseableHttpClient client; if (isMultiThread) client = HttpClientBuilder .create() .setConnectionManager( new PoolingHttpClientConnectionManager()).build(); else client = HttpClientBuilder.create().build(); // 设置代理server地址和端口 // client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port); return client; } /** * 构建httpPost对象 * * @param url * @param headers * @return * @throws UnsupportedEncodingException * @throws URISyntaxException */ public static HttpPost buildHttpPost(String url, Map<String, String> params) throws UnsupportedEncodingException, URISyntaxException { Assert.notNull(url, "构建HttpPost时,url不能为null"); HttpPost post = new HttpPost(url); setCommonHttpMethod(post); HttpEntity he = null; if (params != null) { List<NameValuePair> formparams = new ArrayList<NameValuePair>(); for (String key : params.keySet()) { formparams.add(new BasicNameValuePair(key, params.get(key))); } he = new UrlEncodedFormEntity(formparams, GBK); post.setEntity(he); } // 在RequestContent.process中会自己主动写入消息体的长度,自己不用写入。写入反而检測报错 // setContentLength(post, he); return post; } /** * 构建httpGet对象 * * @param url * @param headers * @return * @throws URISyntaxException */ public static HttpGet buildHttpGet(String url, Map<String, String> params) throws URISyntaxException { Assert.notNull(url, "构建HttpGet时,url不能为null"); HttpGet get = new HttpGet(buildGetUrl(url, params)); return get; } /** * build getUrl str * * @param url * @param params * @return */ private static String buildGetUrl(String url, Map<String, String> params) { StringBuffer uriStr = new StringBuffer(url); if (params != null) { List<NameValuePair> ps = new ArrayList<NameValuePair>(); for (String key : params.keySet()) { ps.add(new BasicNameValuePair(key, params.get(key))); } uriStr.append("?"); uriStr.append(URLEncodedUtils.format(ps, UTF_8)); } return uriStr.toString(); } /** * 设置HttpMethod通用配置 * * @param httpMethod */ public static void setCommonHttpMethod(HttpRequestBase httpMethod) { httpMethod.setHeader(HTTP.CONTENT_ENCODING, CONTENT_CHARSET);// setting // contextCoding // httpMethod.setHeader(HTTP.CHARSET_PARAM, CONTENT_CHARSET); // httpMethod.setHeader(HTTP.CONTENT_TYPE, CONTENT_TYPE_JSON_CHARSET); // httpMethod.setHeader(HTTP.CONTENT_TYPE, CONTENT_TYPE_XML_CHARSET); } /** * 设置成消息体的长度 setting MessageBody length * * @param httpMethod * @param he */ public static void setContentLength(HttpRequestBase httpMethod, HttpEntity he) { if (he == null) { return; } httpMethod.setHeader(HTTP.CONTENT_LEN, String.valueOf(he.getContentLength())); } /** * 构建公用RequestConfig * * @return */ public static RequestConfig buildRequestConfig() { // 设置请求和传输超时时间 RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(SO_TIMEOUT_MS) .setConnectTimeout(CONNECTION_TIMEOUT_MS).build(); return requestConfig; } /** * 强验证必须是200状态否则报异常 * @param res * @throws HttpException */ static void assertStatus(HttpResponse res) throws IOException{ Assert.notNull(res, "http响应对象为null"); Assert.notNull(res.getStatusLine(), "http响应对象的状态为null"); switch (res.getStatusLine().getStatusCode()) { case HttpStatus.SC_OK: // case HttpStatus.SC_CREATED: // case HttpStatus.SC_ACCEPTED: // case HttpStatus.SC_NON_AUTHORITATIVE_INFORMATION: // case HttpStatus.SC_NO_CONTENT: // case HttpStatus.SC_RESET_CONTENT: // case HttpStatus.SC_PARTIAL_CONTENT: // case HttpStatus.SC_MULTI_STATUS: break; default: throw new IOException("server响应状态异常,失败."); } } private HttpClientUtils() { } public static void main(String[] args) throws ClientProtocolException, IOException, URISyntaxException { System.out.println(simpleGetInvoke("http://www.baidu.com", new HashMap<String, String>())); } }
相关文章推荐
- Node.js之网络小爬虫
- Android中的Http通信(二)
- 【网络文摘】面试感悟:3年工作经验程序员应有的技能
- Java.net.URLConnection和Apache HTTPClient的主要区别对比
- iOS网络开发中的同步、异步和请求队列
- iOS网络开发中的同步、异步和请求队列
- 码农小汪-struts2学习8-Action中获取ActionContext,ServletActionContext,HttpServletRequest......
- Apache Http Server与Tomcat实现负载均衡和集群
- 当你网络创业时,你需要记住这些
- ifcfg,ip/ss命令配置IP地址和路由条目,配置文件IP地址和路由条目
- tcp并发服务端
- 转载http://www.yinwang.org/blog-cn/2013/03/07/linux-windows-mac
- Http协议中Cookie详细介绍
- 一种基于网络服务的客户端自动升级框架及其应用
- 問題排查:.NETSystem.Runtime.Remoting.RemotingException: TCP 信道协议冲突: 应为报头。
- HttpClient4访问URL中存在多斜杠///路径的问题
- Stanford机器学习---第五讲. 神经网络的学习 Neural Networks learning
- 网络
- Android二次封装的网络框架 AndNet
- Android Network -判断网络状态(网络的联接,改变,和判断2G/3G/4G)