处理了http 的get和post的请求,分别支持同步处理,异步处理两种方式下见代码。

@Slf4j
public class HttpUtils { /**
* 同步请求http请求 不推荐
*
* @param url
* @return
*/
public static byte[] httpGetSync(String url) {
HttpGet httpGet = new HttpGet(url);
try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
CloseableHttpResponse response = httpclient.execute(httpGet);
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
HttpEntity entity = response.getEntity();
return Utils.inputStream2Bytes(entity.getContent());
} else {
log.error("NetUrls httpGetSync {} url {} ", response.getStatusLine().getStatusCode(), url);
}
} catch (IOException exception) {
log.error("reInitExchangeConfig request exception {}", exception);
}
return null;
} /**
* 指定执行器的http请求 推荐
*
* @param url
* @param exec
* @param callback
*/
public static void httpGet(String url, Executor exec, NetResponse callback) {
getHttpExec().execute(() -> {
byte[] bytes = httpGetSync(url);
exec.execute(() -> {
callback.response(bytes);
});
});
} /**
* httpPost 请求异步推荐
*
* @param url
* @param data
* @param contentType
* @return
*/
public static byte[] httpPostSync(String url, String data, ContentType contentType) { CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new StringEntity(data, contentType)); try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
HttpEntity entity = response.getEntity();
return Utils.inputStream2Bytes(entity.getContent());
} else {
log.warn("HTTP POST Failure {}, {}, {}", url, data, response.getStatusLine().getStatusCode());
}
} catch (IOException exception) {
log.warn("HTTP POST Exception", exception);
} return null;
} /**
* httpPost 请求异步推荐
*
* @param url
* @param data
* @param contentType
* @param exec
* @param callback
*/
public static void httpPost(String url, String data, ContentType contentType, Executor exec, NetResponse callback) {
getHttpExec().execute(() -> {
byte[] bytes = httpPostSync(url, data, contentType);
exec.execute(() -> {
callback.response(bytes);
});
});
} /**
* 不指定执行器的http请求 不推荐
*
* @param url
* @param callback
*/
public static void httpGetAsync(String url, NetResponse callback) {
getHttpExec().execute(() -> {
byte[] bytes = httpGetSync(url);
callback.response(bytes);
});
} /**
* 不指定执行器的http请求 不推荐
*
* @param url
* @param callback
*/
public static void httpGetAsync(String url, String data, ContentType contentType, NetResponse callback) {
getHttpExec().execute(() -> {
byte[] bytes = httpPostSync(url, data, contentType);
callback.response(bytes);
});
} private static ExecutorService httpExec; private static ExecutorService getHttpExec() {
if (httpExec == null) {
synchronized (HttpUtils.class) {
if (httpExec == null) {
httpExec = Executors.newCachedThreadPool();
}
}
}
return httpExec;
} public interface NetResponse {
void response(byte[] response);
} }

java http请求工具整理的更多相关文章

  1. Java http请求工具类

    该工具类可以调用POST请求或者Get请求,参数以Map的方式传入,支持获获取返回值,返回值接收类型为String HttpRequestUtil.java package com.util; imp ...

  2. java HTTP请求工具

    package HttpRequestTest; import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...

  3. Java 发送 Https 请求工具类 (兼容http)

    依赖 jsoup-1.11.3.jar <dependency> <groupId>org.jsoup</groupId> <artifactId>js ...

  4. Http请求工具类(Java原生Form+Json)

    package com.tzx.cc.common.constant.util; import java.io.IOException; import java.io.InputStream; imp ...

  5. java模板模式项目中使用--封装一个http请求工具类

    需要调用http接口的代码继承FundHttpTemplate类,重写getParamData方法,在getParamDate里写调用逻辑. 模板: package com.crb.ocms.fund ...

  6. java jdk原生的http请求工具类

    package com.base; import java.io.IOException; import java.io.InputStream; import java.io.InputStream ...

  7. Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI

    目录 引言 Search APIs Search API Search Request 可选参数 使用 SearchSourceBuilder 构建查询条件 指定排序 高亮请求 聚合请求 建议请求 R ...

  8. Java 性能分析工具 , 第 3 部分: Java Mission Control

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

  9. Java 性能分析工具 , 第 2 部分:Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

随机推荐

  1. 解决postgresql在docker中无法保存状态的问题

    PS:最佳解决方式是将目录挂载到宿主机,容器出问题了,数据还在,以下方式容器出问题会丢失数据,以下思想只供参考!!! 用过docker的人都知道,docker是不适合来放数据库的,这也不是绝对的.如果 ...

  2. weblogic 10c and 12c 打补丁

    https://pan.baidu.com/s/17IaK1SYwHxwt-CRb0zDqXw

  3. $.param()序列化对象

    1.$.param(): param() 方法创建数组或对象的序列化表示形式. 序列化的值可在生成 AJAX 请求时用于 URL 查询字符串中. 第一行是原始数据,第二行是序列化后的.$.param( ...

  4. eclipse中使用maven搭建多模块项目

    暂时参考:https://blog.csdn.net/u012343297/article/details/79883870

  5. cmake尝试检测GCC版本报错

    本人尝试编译指定commit版本的MRPT库,报错如下, CMake Error at cmakemodules/script_detect_gcc.cmake: (LIST): list GET g ...

  6. Python文件对象方法

    使用open()函数创建一个文件对象,这里是可以在这个对象上调用的函数的列表 - 编号 方法名称 描述 1 file.close() 关闭文件,无法读取或写入关闭的文件. 2 file.flush() ...

  7. phpcms v9 更改首页

    phpcms v9的默认首页是(域名/index.php?m=content&c=index&a=init)那为什么你直接敲一个域名它就自己进 去了呢,其实在caches-->c ...

  8. 一台linux机器远程mount另一台linux机器

    本机电脑系统是unbantu,要将另一台linux电脑上的文件mount到本机目录下.mount的原理是网络文件系统,即NFS,本机操作步骤如下 一,安装 nfs-common  : apt inst ...

  9. php 防盗链

    防盗链的技术已经很普遍了,有些网站不喜欢自己的图片被别的网站直接复制使用,便使用了防盗链的技术,这样别人在直接复制使用网站图片时,图片便会按照程序的设定不显示或显示防盗链等字样. 使用了防盗链技术,不 ...

  10. 二、启动一款app演示

    一.下载aapt包 1. aapt即Android Asset Packaging Tool,在SDK的build-tools目录下.该工具可以查看apk包名和launcherActivity 2.打 ...