HttpUtils 发送http请求工具类(实例讲解)

发布时间 - 2026-01-11 02:18:52    点击率:

废话不多说,直接上代码

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
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.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
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 com.pingan.qhcs.map.audit.constant.CodeConstant;
import com.pingan.qhcs.map.audit.exception.MapException;

public class HttpClientUtil {

 protected static Log logger = LogFactory.getLog(HttpClientUtil.class);
 
 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
  */
 public static CloseableHttpClient getHttpClient() {
  init();
  return HttpClients.custom().setConnectionManager(cm).build();
 }

 public static String httpGetRequest(String url) {
  HttpGet httpGet = new HttpGet(url);
  return getResult(httpGet);
 }

 public static String httpGetRequest(String url, Map<String, Object> 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);
 }

 public static String httpGetRequest(String url, Map<String, Object> headers, Map<String, Object> params)
   throws URISyntaxException {
  URIBuilder ub = new URIBuilder();
  ub.setPath(url);

  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);
 }

 public static String httpPostRequest(String url) {
  HttpPost httpPost = new HttpPost(url);
  return getResult(httpPost);
 }

 public static String httpPostRequest(String url, Map<String, Object> params) throws UnsupportedEncodingException {
  HttpPost httpPost = new HttpPost(url);
  ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
  httpPost.setEntity(new UrlEncodedFormEntity(pairs, UTF_8));
  return getResult(httpPost);
 }

 public static String httpPostRequest(String url, Map<String, Object> headers, Map<String, Object> params)
   throws UnsupportedEncodingException {
  HttpPost httpPost = new HttpPost(url);

  for (Map.Entry<String, Object> param : headers.entrySet()) {
   httpPost.addHeader(param.getKey(), String.valueOf(param.getValue()));
  }

  ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
  httpPost.setEntity(new UrlEncodedFormEntity(pairs, UTF_8));

  return getResult(httpPost);
 }

 public static String httpPostRequest(String url, Map<String, Object> headers, String strBody)
   throws Exception {
  HttpPost httpPost = new HttpPost(url);

  for (Map.Entry<String, Object> param : headers.entrySet()) {
   httpPost.addHeader(param.getKey(), String.valueOf(param.getValue()));
  }
  httpPost.setEntity(new StringEntity(strBody, UTF_8));
  return getResult(httpPost);
 }
 
 private static ArrayList<NameValuePair> covertParams2NVPS(Map<String, Object> params) {
  ArrayList<NameValuePair> pairs = new ArrayList<NameValuePair>();
  for (Map.Entry<String, Object> param : params.entrySet()) {
   pairs.add(new BasicNameValuePair(param.getKey(), String.valueOf(param.getValue())));
  }

  return pairs;
 }

 /**
  * 处理Http请求
  * 
  * setConnectTimeout:设置连接超时时间,单位毫秒。
  * setConnectionRequestTimeout:设置从connect Manager获取Connection 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。
  * setSocketTimeout:请求获取数据的超时时间,单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。
  * 
  * @param request
  * @return
  */
 private static String getResult(HttpRequestBase request) {
  
  RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(60000)
    .setConnectionRequestTimeout(5000).setSocketTimeout(60000).build();
  request.setConfig(requestConfig);// 设置请求和传输超时时间

  // 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);
    response.close();
    // httpClient.close();
    return result;
   }
  } catch (ClientProtocolException e) {
   logger.error("[maperror] HttpClientUtil ClientProtocolException : " + e.getMessage());
   throw new MapException(CodeConstant.CODE_CONNECT_FAIL, "HttpClientUtil ClientProtocolException :" + e.getMessage());
  } catch (IOException e) {
   logger.error("[maperror] HttpClientUtil IOException : " + e.getMessage());
   throw new MapException(CodeConstant.CODE_CONNECT_FAIL, "HttpClientUtil IOException :" + e.getMessage());
  } finally {

  }
  return EMPTY_STR;
 }

}

以上这篇HttpUtils 发送http请求工具类(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# http请求工具类  # java实现http请求工具类示例  # java发送HttpClient请求及接收请求结果过程的简单实例  # java发送http get请求的两种方法(总结)  # 给大家  # 连接池  # 连接数  # 时间内  # 希望能  # 这篇  # 多说  # 小编  # 大家多多  # 默认值  # message  # PoolingHttpClientConnectionManager  # conn  # BasicNameValuePair  # qhcs  # map  # EntityUtils  # pingan  # HttpClients  # HttpRequestBase 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 香港服务器租用每月最低只需15元?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  如何在宝塔面板中修改默认建站目录?  如何在云主机上快速搭建多站点网站?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何基于云服务器快速搭建个人网站?  EditPlus中的正则表达式 实战(2)  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  使用C语言编写圣诞表白程序  Python数据仓库与ETL构建实战_Airflow调度流程详解  如何在万网自助建站中设置域名及备案?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  如何在阿里云高效完成企业建站全流程?  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  微信小程序 五星评分(包括半颗星评分)实例代码  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  网页设计与网站制作内容,怎样注册网站?  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  如何用PHP快速搭建高效网站?分步指南  怎样使用JSON进行数据交换_它有什么限制  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  详解jQuery中的事件  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  Laravel如何配置Horizon来管理队列?(安装和使用)  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  如何用免费手机建站系统零基础打造专业网站?  Laravel如何生成API文档?(Swagger/OpenAPI教程)  如何注册花生壳免费域名并搭建个人网站?  Laravel如何生成URL和重定向?(路由助手函数)  Swift中swift中的switch 语句  重庆市网站制作公司,重庆招聘网站哪个好?  如何快速打造个性化非模板自助建站?  javascript读取文本节点方法小结  网站优化排名时,需要考虑哪些问题呢?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  网站建设整体流程解析,建站其实很容易!  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  油猴 教程,油猴搜脚本为什么会网页无法显示?  新三国志曹操传主线渭水交兵攻略  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程