Http请求封装(对HttpClient类的进一步封装,使之调用更方便。另外,此类管理唯一的HttpClient对象,支持线程池调用,效率更高)
package com.ad.ssp.engine.common; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import org.apache.http.Header;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.message.BasicHeader;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import com.adwm.lib.http.HttpClient;
import com.adwm.lib.http.HttpResult; /**
* 对HttpClient类的进一步封装,使之调用更方便。另外,此类管理唯一的HttpClient对象,支持线程池调用,效率更高
*
*
*/
public class HttpClientUtil {
private static final Logger logger = LogManager.getLogger(HttpClientUtil.class); // private static HttpClient client = new HttpClient(600);
private static HttpClient client = new HttpClient(); public static HttpClient getInstance() {
return client;
} /**
* form方式提交http post请求
*
* @param targetUrl
* 目标url地址
* @param headers
* header请求参数集合
* @param postParams
* body请求参数集合
* @param timeout
* 超时时间(单位为毫秒)
* @return 返回的http body体经utf8编码后的字符串
*/
public static String postKVParams1(String targetUrl, Map<String, String> headers, Map<String, Object> postParams,
int timeout) {
List<Header> headerList = getHeaderList(headers);
try {
HttpResult hr = client.post(targetUrl, headerList, postParams, timeout);
if (hr.getStatus() == 200)
return hr.getContentAsString();
else {
logger.warn("The request url is: {}, its reponse code is: {}", targetUrl, hr.getStatus());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return null;
} private static List<Header> getHeaderList(Map<String, String> headers) {
if (headers != null && headers.size() > 0) {
List<Header> headerList = new ArrayList<Header>();
for (Entry<String, String> entry : headers.entrySet()) {
headerList.add(new BasicHeader(entry.getKey(), entry.getValue()));
}
return headerList;
} return null;
} /**
* form方式提交http post请求
*
* @param targetUrl
* 目标url地址
* @param headers
* header请求参数集合
* @param postParams
* body请求参数集合
* @param timeout
* 超时时间(单位为毫秒)
* @return 未处理的HttpResult对象,供调用方自己解析和处理
*/
public static HttpResult postKVParams2(String targetUrl, Map<String, String> headers,
Map<String, Object> postParams, int timeout) {
List<Header> headerList = getHeaderList(headers);
try {
return client.post(targetUrl, headerList, postParams, timeout);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return null;
} /**
* 用post方法提交json字符串参数
*
* @param targetUrl
* 目标url地址
* @param headers
* header请求参数集合
* @param jsonBody
* json字符串
* @param timeout
* 超时时间(单位为毫秒)
* @return 返回的http body体经utf8编码后的字符串
*/
public static String postJsonParams1(String targetUrl, Map<String, String> headers, String jsonBody, int timeout) throws Exception {
List<Header> headerList = getHeaderList(headers); StringEntity entity = new StringEntity(jsonBody, "UTF-8");
entity.setContentType("application/json");
entity.setContentEncoding("UTF-8");
HttpResult httpRst = client.post(targetUrl, headerList, entity, timeout);
if(httpRst.getStatus() == ResponseCodeUtil.HTTP_STATUS_OK)
return httpRst.getContentAsString();
else {
logger.warn("The request url is: {}, its reponse code is: {}", targetUrl, httpRst.getStatus());
} return null;
} /**
* 用post方法提交json字符串参数
*
* @param targetUrl
* 目标url地址
* @param headers
* header请求参数集合
* @param jsonBody
* json字符串
* @param timeout
* 超时时间(单位为毫秒)
* @return 未处理的HttpResult对象,供调用方自己解析和处理
*/
public static HttpResult postJsonParams2(String targetUrl, Map<String, String> headers, String jsonBody,
int timeout) throws Exception {
List<Header> headerList = getHeaderList(headers);
StringEntity entity = new StringEntity(jsonBody, "UTF-8");
entity.setContentType("application/json");
return client.post(targetUrl, headerList, entity, timeout);
} /**
* 通过POST方式发起protocol请求
* @param url
* @param headers
* @param content
* @param timeout
* @return
*/
public static byte[] postProtobuf(String url, Map<String, String> headers, byte[] content, int timeout) throws Exception {
List<Header> headerList = getHeaderList(headers);
ByteArrayEntity entity = new ByteArrayEntity(content, ContentType.APPLICATION_OCTET_STREAM);
HttpResult httpResult = client.post(url, headerList, entity, timeout);
if (httpResult.getStatus() == ResponseCodeUtil.HTTP_STATUS_OK){
return httpResult.getContent();
} else {
logger.warn("The request url is: {}, its reponse code is: {}", url, httpResult.getStatus());
}
return null;
} /**
* 以get方法请求url
*
* @param targetUrl
* 目标url地址
* @param headers
* header请求参数集合
* @param timeout
* 超时时间(单位为毫秒)
* @return 返回的http body体经utf8编码后的字符串
*/
public static String get1(String targetUrl, Map<String, String> headers, int timeout) throws Exception {
List<Header> headerList = getHeaderList(headers);
HttpResult httpRst = client.get(targetUrl, headerList, timeout);
if(httpRst.getStatus() == ResponseCodeUtil.HTTP_STATUS_OK)
return httpRst.getContentAsString();
else {
logger.warn("The request url is: {}, its reponse code is: {}", targetUrl, httpRst.getStatus());
}
return null;
} /**
* 以get方法请求url
*
* @param targetUrl
* 目标url地址
* @param headers
* header请求参数集合
* @param timeout
* 超时时间(单位为毫秒)
* @return 未处理的HttpResult对象,供调用方自己解析和处理
*/
public static HttpResult get2(String targetUrl, Map<String, String> headers, int timeout) throws Exception {
List<Header> headerList = getHeaderList(headers);
return client.get(targetUrl, headerList, timeout);
} }
Http请求封装(对HttpClient类的进一步封装,使之调用更方便。另外,此类管理唯一的HttpClient对象,支持线程池调用,效率更高)的更多相关文章
- c++封装编写线程池
在csapp学习或者其他linux底层编程的过程中,一般都会举一些多线程或多进程的例子,配合底层同步原语.系统调用api来解释怎么创建多线程/多进程. 但是这些例子和实际项目中所用到的多线程/多进程编 ...
- -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中
本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait( ...
- Java多线程01(Thread类、线程创建、线程池)
Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于 ...
- Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)
多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念.进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线 ...
- Java线程池的原理及几类线程池的介绍
刚刚研究了一下线程池,如果有不足之处,请大家不吝赐教,大家共同学习.共同交流. 在什么情况下使用线程池? 单个任务处理的时间比较短 将需处理的任务的数量大 使用线程池的好处: 减少在创建和销毁线程上所 ...
- java线程池ThreadPoolExecutor类使用详解
在<阿里巴巴java开发手册>中指出了线程资源必须通过线程池提供,不允许在应用中自行显示的创建线程,这样一方面是线程的创建更加规范,可以合理控制开辟线程的数量:另一方面线程的细节管理交给线 ...
- 高并发之——不得不说的线程池与ThreadPoolExecutor类浅析
一.抛砖引玉 既然Java中支持以多线程的方式来执行相应的任务,但为什么在JDK1.5中又提供了线程池技术呢?这个问题大家自行脑补,多动脑,肯定没坏处,哈哈哈... 说起Java中的线程池技术,在很多 ...
- 【高并发】不得不说的线程池与ThreadPoolExecutor类浅析
大家好,我是冰河~~ 今天,我们一起来简单聊聊线程池中的ThreadPoolExecutor类,好了,不多说了,开始进入今天的正题. 一.抛砖引玉 既然Java中支持以多线程的方式来执行相应的任务,但 ...
- 高级java必会系列一:常用线程池和调度类
众所周知,开启线程2种方法:第一是实现Runable接口,第二继承Thread类.(当然内部类也算...)常用的,这里就不再赘述. 一.线程池 1.newCachedThreadPool (1)缓存型 ...
随机推荐
- 手机测试用例-wap测试用例
Software Test Case P/F comment tester test time P/F comment tester ID 功能描述 操作步骤 预期结果 备注 wap_001 wap ...
- Marriage Ceremonies LightOJ - 1011
Marriage Ceremonies LightOJ - 1011 常规状压dp.popcount(S)表示S集合中元素数量.ans[S]表示S中的女性与前popcount(S)个男性结婚的最大收益 ...
- 人品问题 树形dp
题目 网上出现了一种高科技产品——人品测试器.只要你把你的真实姓名输入进去,系统将自动输出你的人品指数.把儿不相信自己的人品为0.经过了许多研究后,把儿得出了一个更为科学的人品计算方法.这种方法的理论 ...
- 递推DP URAL 1244 Gentlemen
题目传送门 /* 题意:给出少了若干卡片后的总和,和原来所有卡片,问少了哪几张 DP:转化为少了的总和是否能有若干张卡片相加得到,dp[j+a[i]] += dp[j]; 记录一次路径,当第一次更新的 ...
- 模拟 百度之星资格赛 1003 IP聚合
题目传送门 /* 模拟水题,排序后找出重复的ip就可以了 */ #include <cstdio> #include <iostream> #include <algor ...
- Excel 宏练习
任务描述: 利用 Excel 绘制函数图像 f(x)=x^2/3+0.9*(3.3-x^2)^1/2*sin(a*x),并通过按钮事件来刷新图像. 问题分析: 可以参考类似 Matlab 绘图的方式, ...
- jQuery access()方法
最开始只是想了解attr方法,发现它内部调用了jQuery.access()方法.除了attr,还有prop.text.html.css.data 都是内部调用了jQuery.access()方法,可 ...
- 作用域链、this细说
一.作用域链 作用域:浏览器给js的一个生存环境(栈内存) 作用域链:js中的关键字var和function 都可以提前声明和定义,提前声明和定义的放在我们的内存地址(堆内存)中.然后js从上到下逐行 ...
- 后TOS时代的码头数字化生产力
之前看过一篇文章是,是INFORM的副总裁写的关于以TOS外挂模式提升码头生产效能的文章.文章对外挂模式的总结挺好的,我最近也一直从事这块的工作,以此文梳理一下前面的经验,记录一下自己的感想. TOS ...
- 从URL输入到页面展示都发生了什么?
总的来说分为以下过程: DNS解析 TCP三次握手 发送HTTP请求 服务器端处理请求并返回HTTP保文 浏览器渲染页面 断开连接:TCP的四次挥手 URL到底是什么? URL(Uniform Res ...