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)缓存型 ...
随机推荐
- lightoj1200 【完全背包】
题意: 有一个能放W重的袋子,然后妻子给了老公一列清单,每个item会有价格,数量,重量. 首先得满足老婆的要求,然后在可装的地方输出最大还能拿多少使得拿的东西的钱最多. 注意标题是thief,我想大 ...
- hdoj1028;他们说这题叫dp...
#include<cstdio> #include<string> #include<iostream> #include<vector> #inclu ...
- Electron开发
[Debug] 1)cmd进入项目所在根目录,输入: $ npm install --save-dev devtron$ npm install --save electron-debug 2)在主j ...
- Qt文本读写之二:目录操作
一.简介 QDir类用来访问目录结构及其内容,可以操作路径名.访问路径和文件相关信息以及操作底层的文件系统,还可以访问Qt的资源系统.Qt使用"/"作为通用的目录分隔符和URLs的 ...
- Hdu 2089 不要62 (数位dp入门题目)
题目链接: Hdu 2089 不要62 题目描述: 给一个区间 [L, R] ,问区间内不含有4和62的数字有多少个? 解题思路: 以前也做过这个题目,但是空间复杂度是n.如果数据范围太大就GG了.今 ...
- AtCoder Grand Contest 017 A
Problem Statement There are N bags of biscuits. The i-th bag contains Ai biscuits. Takaki will selec ...
- Coloring Trees CodeForces - 711C
Coloring Trees CodeForces - 711C 题意:有n个点,每个点有一个c值,如果为0表示它没有被染色,否则表示它被染成了c值的颜色.颜色有1到m.把第i棵树染成颜色j所需要的代 ...
- django 相关问题
和数据库的连接 session的实现 django app开发步骤 python环境准备 数据库安装 model定义 url mapping定义 view定义 template定义 如何查看数据库里的 ...
- 抽象类 abstract
抽象类就是拿来继承的抽象方法就是拿来重写的 1.用abstract可以用来修饰类或方法,分别叫抽象类和抽象方法. 2.含有抽象方法的类必须被声明为抽象类.,抽象类必须被继承,抽象方法也必须被重写. 3 ...
- 当document.write 遇到外联script
先来看个例子: <!DOCTYPE html> <html> <head> <title>测试 document.write</title> ...