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对象,支持线程池调用,效率更高)的更多相关文章

  1. c++封装编写线程池

    在csapp学习或者其他linux底层编程的过程中,一般都会举一些多线程或多进程的例子,配合底层同步原语.系统调用api来解释怎么创建多线程/多进程. 但是这些例子和实际项目中所用到的多线程/多进程编 ...

  2. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

  3. Java多线程01(Thread类、线程创建、线程池)

    Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于 ...

  4. Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)

    多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念.进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线 ...

  5. Java线程池的原理及几类线程池的介绍

    刚刚研究了一下线程池,如果有不足之处,请大家不吝赐教,大家共同学习.共同交流. 在什么情况下使用线程池? 单个任务处理的时间比较短 将需处理的任务的数量大 使用线程池的好处: 减少在创建和销毁线程上所 ...

  6. java线程池ThreadPoolExecutor类使用详解

    在<阿里巴巴java开发手册>中指出了线程资源必须通过线程池提供,不允许在应用中自行显示的创建线程,这样一方面是线程的创建更加规范,可以合理控制开辟线程的数量:另一方面线程的细节管理交给线 ...

  7. 高并发之——不得不说的线程池与ThreadPoolExecutor类浅析

    一.抛砖引玉 既然Java中支持以多线程的方式来执行相应的任务,但为什么在JDK1.5中又提供了线程池技术呢?这个问题大家自行脑补,多动脑,肯定没坏处,哈哈哈... 说起Java中的线程池技术,在很多 ...

  8. 【高并发】不得不说的线程池与ThreadPoolExecutor类浅析

    大家好,我是冰河~~ 今天,我们一起来简单聊聊线程池中的ThreadPoolExecutor类,好了,不多说了,开始进入今天的正题. 一.抛砖引玉 既然Java中支持以多线程的方式来执行相应的任务,但 ...

  9. 高级java必会系列一:常用线程池和调度类

    众所周知,开启线程2种方法:第一是实现Runable接口,第二继承Thread类.(当然内部类也算...)常用的,这里就不再赘述. 一.线程池 1.newCachedThreadPool (1)缓存型 ...

随机推荐

  1. c# 组件无法下断点

    1. c#组件 2.断点能下,且运行中断点本身显示正常(正常实心红点,不是白底红圈) 3.运行中无法进入组件 4.主程序中,组件的实例无法被观测到,调试显示:无法计算得到这个对象 , 但是程序能运行 ...

  2. loj#2540. 「PKUWC2018」随机算法

    传送门 完了pkuwc咋全是dp怕是要爆零了-- 设\(f(S)\)表示\(S\)的排列数,\(S\)为不能再选的点集(也就是选到独立集里的点和与他们相邻的点),\(mx(S)\)表示\(S\)状态下 ...

  3. python 导入.py

    转自: https://blog.csdn.net/winycg/article/details/78512300 在同一个文件夹下调用函数:A.py文件: def add(x,y): print(' ...

  4. Springboot的yml文件

    spring: datasource: # 数据库四大组件 schema-password: root data-username: root driver-class-name: com.mysql ...

  5. Zookeeper的多节点集群详细启动步骤(3或5节点)

    分为 (1)分别去3或5节点上去启动Zookeeper进程 (2)自己写个脚本,直接在主节点上去启动Zookeeper进程. (1)分别去3或5节点上去启动Zookeeper进程 第一步: [hado ...

  6. April Fools Contest 2017 B

    Description Programmers' kids solve this riddle in 5-10 minutes. How fast can you do it? Input The i ...

  7. 18.5.1使用Proxy和InvocationHandler创建动态代理

    package d18_5_1; public interface Person { void walk(); void sayHello(String name); } package d18_5_ ...

  8. 华容道 noip2013 70分搜索

    题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...

  9. 页面html图片按钮多种写法

    原地址:http://blog.163.com/weison_hi/blog/static/17680404720118534033788/ 第一种: 在一般情况下按钮提交表单: <form i ...

  10. AJPFX总结List的三个子类的特点

    ArrayList:                        底层数据结构是数组,查询快,增删慢.                        线程不安全,效率高.              ...