##前言##
在日常开发中,我们经常需要通过http协议去调用网络内容,虽然java自身提供了net相关工具包,但是其灵活性和功能总是不如人意,于是有人专门搞出一个httpclient类库,来方便进行Http操作。对于httpcore的源码研究,我们可能并没有达到这种层次,在日常开发中也只是需要的时候,在网上百度一下,然后进行调用就行。在项目中对于这个工具类库也许没有进行很好的封装。在哪里使用就写在哪些,很多地方用到,就在多个地方写。反正是复制粘贴,很方便,但是这样就会导致项目中代码冗余。所以这里简单的对httpcient的简单操作封装成一个工具类,统一放在项目的工具包中,在使用的时候直接从工具包中调用,不需要写冗余代码。

httpclient操作实例

首先需要在注意的一点是,这是基于httpclient4.5版本的,我们在使用的时候需要引入具体对应jar。下面是具体代码示例

import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;import javax.net.ssl.SSLContext;import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.config.RequestConfig;
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.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;
import org.apache.http.util.EntityUtils;/*** 基于 httpclient 4.5版本的 http工具类* * @author 爱琴孩* */
public class HttpClientTool {private static final CloseableHttpClient httpClient;public static final String CHARSET = "UTF-8";// 采用静态代码块,初始化超时时间配置,再根据配置生成默认httpClient对象static {RequestConfig config = RequestConfig.custom().setConnectTimeout(60000).setSocketTimeout(15000).build();httpClient = HttpClientBuilder.create().setDefaultRequestConfig(config).build();}public static String doGet(String url, Map<String, String> params) {return doGet(url, params, CHARSET);}public static String doGetSSL(String url, Map<String, String> params) {return doGetSSL(url, params, CHARSET);}public static String doPost(String url, Map<String, String> params) throws IOException {return doPost(url, params, CHARSET);}/*** HTTP Get 获取内容* @param url 请求的url地址 ?之前的地址* @param params 请求的参数* @param charset 编码格式* @return 页面内容*/public static String doGet(String url, Map<String, String> params, String charset) {if (StringUtils.isBlank(url)) {return null;}try {if (params != null && !params.isEmpty()) {List<NameValuePair> pairs = new ArrayList<NameValuePair>(params.size());for (Map.Entry<String, String> entry : params.entrySet()) {String value = entry.getValue();if (value != null) {pairs.add(new BasicNameValuePair(entry.getKey(), value));}}// 将请求参数和url进行拼接url += "?" + EntityUtils.toString(new UrlEncodedFormEntity(pairs, charset));}HttpGet httpGet = new HttpGet(url);CloseableHttpResponse response = httpClient.execute(httpGet);int statusCode = response.getStatusLine().getStatusCode();if (statusCode != 200) {httpGet.abort();throw new RuntimeException("HttpClient,error status code :" + statusCode);}HttpEntity entity = response.getEntity();String result = null;if (entity != null) {result = EntityUtils.toString(entity, "utf-8");}EntityUtils.consume(entity);response.close();return result;} catch (Exception e) {e.printStackTrace();}return null;}/*** HTTP Post 获取内容* @param url 请求的url地址 ?之前的地址* @param params 请求的参数* @param charset 编码格式* @return 页面内容* @throws IOException*/public static String doPost(String url, Map<String, String> params, String charset) throws IOException {if (StringUtils.isBlank(url)) {return null;}List<NameValuePair> pairs = null;if (params != null && !params.isEmpty()) {pairs = new ArrayList<NameValuePair>(params.size());for (Map.Entry<String, String> entry : params.entrySet()) {String value = entry.getValue();if (value != null) {pairs.add(new BasicNameValuePair(entry.getKey(), value));}}}HttpPost httpPost = new HttpPost(url);if (pairs != null && pairs.size() > 0) {httpPost.setEntity(new UrlEncodedFormEntity(pairs, CHARSET));}CloseableHttpResponse response = null;try {response = httpClient.execute(httpPost);int statusCode = response.getStatusLine().getStatusCode();if (statusCode != 200) {httpPost.abort();throw new RuntimeException("HttpClient,error status code :" + statusCode);}HttpEntity entity = response.getEntity();String result = null;if (entity != null) {result = EntityUtils.toString(entity, "utf-8");}EntityUtils.consume(entity);return result;} catch (ParseException e) {e.printStackTrace();} finally {if (response != null)response.close();}return null;}/*** HTTPS Get 获取内容* @param url 请求的url地址 ?之前的地址* @param params 请求的参数* @param charset  编码格式* @return 页面内容*/public static String doGetSSL(String url, Map<String, String> params, String charset) {if (StringUtils.isBlank(url)) {return null;}try {if (params != null && !params.isEmpty()) {List<NameValuePair> pairs = new ArrayList<NameValuePair>(params.size());for (Map.Entry<String, String> entry : params.entrySet()) {String value = entry.getValue();if (value != null) {pairs.add(new BasicNameValuePair(entry.getKey(), value));}}url += "?" + EntityUtils.toString(new UrlEncodedFormEntity(pairs, charset));}HttpGet httpGet = new HttpGet(url);// https  注意这里获取https内容,使用了忽略证书的方式,当然还有其他的方式来获取https内容CloseableHttpClient httpsClient = HttpClientTool.createSSLClientDefault();CloseableHttpResponse response = httpsClient.execute(httpGet);int statusCode = response.getStatusLine().getStatusCode();if (statusCode != 200) {httpGet.abort();throw new RuntimeException("HttpClient,error status code :" + statusCode);}HttpEntity entity = response.getEntity();String result = null;if (entity != null) {result = EntityUtils.toString(entity, "utf-8");}EntityUtils.consume(entity);response.close();return result;} catch (Exception e) {e.printStackTrace();}return null;}/*** 这里创建了忽略整数验证的CloseableHttpClient对象* @return*/public static CloseableHttpClient createSSLClientDefault() {try {SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {// 信任所有public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {return true;}}).build();SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);return HttpClients.custom().setSSLSocketFactory(sslsf).build();} catch (KeyManagementException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (KeyStoreException e) {e.printStackTrace();}return HttpClients.createDefault();}
}

总结

上面就是对于httpclient的简单工具类,对于httpclient,还有很多知识点需要仔细研究,后面再和大家一起来总结学习!

httpclient封装工具类相关推荐

  1. JAVA——保持cookie登录状态的HttpClient封装工具类

    在日常开发中,我们经常需要通过http协议去调用网络内容,虽然java自身提供了net相关工具包,但是其灵活性和功能总是不如人意,于是有人专门搞出一个httpclient类库,来方便进行Http操作. ...

  2. JAVA——HttpClient封装工具类

    在日常开发中,我们经常需要通过http协议去调用网络内容,虽然java自身提供了net相关工具包,但是其灵活性和功能总是不如人意,于是有人专门搞出一个httpclient类库,来方便进行Http操作. ...

  3. JAVA——Okhttp封装工具类

    基本概念 OKhttp:一个处理网络请求的开源项目,是安卓端最火热的轻量级框架. Maven <!--OK HTTP Client--><dependency><grou ...

  4. android文件读取工具类,Android 下读取Assets Properties操作封装工具类

    Android 下读取Assets Properties操作封装工具类 发布时间:2018-06-03作者:laosun阅读(2081) 为了方便使用,首先创建BaseApplication类,如下所 ...

  5. 数据库MySQL基础---JDBC开发步骤--JDBC封装工具类--PreparedStatement实现CRUD操作

    JDBC简介 1.JDBC定义Java数据库连接(Java Database Connectivity,简称JDBC):是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询 ...

  6. JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块...

    JAVA之旅(五)--this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块 周末收获颇多,继续学习 一.this关键字 用于区分局部变量和成员变量同名的情况 ...

  7. HttpClient Utils工具类的编写方法分享

    转自: HttpClient Utils工具类的编写方法分享 HttpClient简介: HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功 ...

  8. 如何调用封装工具类调用网上接口查询工作日

    如何调用封装工具类调用网上接口查询工作日 这里的编辑器是STS,用的springboot集成环境: 先引进pom.xml依赖包 <?xml version="1.0" enc ...

  9. 四、EasyExcel实现Excel读写,封装工具类

    在项目中,我们经常用到EasyExcel框架实现:对Excel文件的读写操作.为了方便后续其他项目中的使用,将对Excel文件的读写操作,封装成工具类. 一.EasyExcel实现Excel读写,封装 ...

  10. 仿京东APP分类页面(mvp模式+OkHttp封装工具类+拦截器+弱引用回收)

    仿京东APP分类页面: 添加依赖 compile 'com.android.support:recyclerview-v7:24.0.0' compile 'com.google.code.gson: ...

最新文章

  1. 《Adobe Illustrator CS6中文版经典教程(彩色版)》—第0课0.11节创建与应用图案...
  2. JavaScript高级应用(二)
  3. mysql常用表名大全_MySQL常用命令大全
  4. 深入Java关键字null
  5. oracle select 行数据_【赵强老师】什么是Oracle的数据字典?
  6. 新研究:长寿又健康的秘诀
  7. java 事务嵌套_解惑 spring 嵌套事务
  8. WSS2.0 SP2升级到WSS3.0步骤
  9. android 调出键盘表情_Android--如何优雅的切换表情和键盘(原理)
  10. 常见笔顺错误的字_原来这么多年,我写字的笔顺一直都是错的
  11. 浏览班级为计算机的同学记录的命令,2011年全国计算机等级考试二级VFP笔记(4)...
  12. 工业互联网是什么?发展有多厉害?
  13. 用devc++表白_表白墙第42期|别人深夜买醉,我只想买你的心
  14. 消防工程师 1.1 消防给水及设施(2)
  15. 北邮803考研经验杂谈
  16. 阿里云模板建站好处(模板建站+定制建站)优惠购买指导
  17. redis + laravel5.5
  18. lucene tvx tvd tvf 文件
  19. AE基础教程第一阶段——02导入素材以及序列串的方法
  20. 微信小程序 直播商品接口 上传图片 300006 goods img upload fail

热门文章

  1. win7升级win10正式版_Win7免费升级Win10
  2. mindmanager2021思维导图许可密钥V21.0.334最新版免费安装下载
  3. 迅雷前副总裁李金波:我的创业感悟
  4. 解决Gmail不能正常登录的问题,并推荐几个小窍门 [转]
  5. 接入阿里云OSS--公有云分布式存储
  6. SQL SERVER2000企业版安装过程-如何选择授权模式?
  7. 哪些短信平台能发国际短信?
  8. PCB多层板每层厚度及材质
  9. Domain Adaptation论文合集
  10. java版我的世界快速建造_1分钟教你建造《我的世界》最精致的窑洞!从此告别穴居人生活?...