如何使用HttpClient包实现JAVA发起HTTP请求?
今天在搭建公司项目框架的时候,发现缺少了一个Java发送HTTP请求的工具类,在网上找了一通,经过自己的改造,已经能实现get请求和post请求的了,现在将代码贴在这里。给大家参考。

1 package com.sunyard.util;
2
3 import com.sunyard.constans.Constants;
4
5 import org.apache.commons.httpclient.*;
6 import org.apache.commons.httpclient.methods.GetMethod;
7 import org.apache.commons.httpclient.methods.PostMethod;
8 import org.apache.commons.httpclient.methods.RequestEntity;
9 import org.apache.commons.httpclient.methods.StringRequestEntity;
10 import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
11 import org.apache.commons.lang.StringUtils;
12 import org.apache.logging.log4j.LogManager;
13 import org.apache.logging.log4j.Logger;
14
15 import java.io.IOException;
16 import java.net.URL;
17
18 public class HTTPUtils {
19
20 private final static Logger logger = LogManager.getLogger(Constants.LOGNAME);
21
22 private final static String OPERATER_NAME = "【HTTP操作】";
23
24 private final static int SUCCESS = 200;
25
26 private final static String UTF8 = "UTF-8";
27
28 private HttpClient client;
29
30 private static HTTPUtils instance = new HTTPUtils();
31
32 /**
33 * 私有化构造器
34 */
35 private HTTPUtils() {
36
37 HttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();
38 HttpConnectionManagerParams params = httpConnectionManager.getParams();
39 params.setConnectionTimeout(5000);
40 params.setSoTimeout(20000);
41 params.setDefaultMaxConnectionsPerHost(1000);
42 params.setMaxTotalConnections(1000);
43 client = new HttpClient(httpConnectionManager);
44 client.getParams().setContentCharset(UTF8);
45 client.getParams().setHttpElementCharset(UTF8);
46 }
47
48 /**
49 * get请求
50 */
51 public static String get(URL url) {
52 return instance.doGet(url);
53 }
54
55 private String doGet(URL url) {
56 long beginTime = System.currentTimeMillis();
57 String respStr = StringUtils.EMPTY;
58 try {
59 logger.info(OPERATER_NAME + "开始get通信,目标host:" + url);
60 HttpMethod method = new GetMethod(url.toString());
61 // 中文转码
62 method.getParams().setContentCharset(UTF8);
63 try {
64 client.executeMethod(method);
65 } catch (HttpException e) {
66
67 logger.error(new StringBuffer("发送HTTP GET给\r\n").append(url)
68 .append("\r\nHTTP异常\r\n"), e);
69 } catch (IOException e) {
70
71 logger.error(new StringBuffer("发送HTTP GET给\r\n").append(url)
72 .append("\r\nIO异常\r\n"), e);
73 }
74 if (method.getStatusCode() == SUCCESS) {
75 respStr = method.getResponseBodyAsString();
76 }
77 // 释放连接
78 method.releaseConnection();
79
80 logger.info(OPERATER_NAME + "通讯完成,返回码:" + method.getStatusCode());
81 logger.info(OPERATER_NAME + "返回内容:" + method.getResponseBodyAsString());
82 logger.info(OPERATER_NAME + "结束..返回结果:" + respStr);
83 } catch (Exception e) {
84 logger.info(OPERATER_NAME, e);
85 }
86 long endTime = System.currentTimeMillis();
87 logger.info(OPERATER_NAME + "共计耗时:" + (endTime - beginTime) + "ms");
88
89 return respStr;
90 }
91
92
93 /**
94 * POST请求
95 */
96 public static String post(URL url, String content) {
97 return instance.doPost(url, content);
98 }
99
100 private String doPost(URL url, String content) {
101 long beginTime = System.currentTimeMillis();
102 String respStr = StringUtils.EMPTY;
103 try {
104 logger.info(OPERATER_NAME + "开始post通信,目标host:" + url.toString());
105 logger.info("通信内容:" + content);
106 PostMethod post = new PostMethod(url.toString());
107 RequestEntity requestEntity = new StringRequestEntity(content, "application/json;charse=UTF-8", UTF8);
108 post.setRequestEntity(requestEntity);
109 // 设置格式
110 post.getParams().setContentCharset(UTF8);
111
112 client.executeMethod(post);
113 if (post.getStatusCode() == SUCCESS) {
114 respStr = post.getResponseBodyAsString();
115 }
116
117 logger.info(OPERATER_NAME + "通讯完成,返回码:" + post.getStatusCode());
118 logger.info(OPERATER_NAME + "返回内容:" + post.getResponseBodyAsString());
119 logger.info(OPERATER_NAME + "结束..返回结果:" + respStr);
120 post.releaseConnection();
121
122 } catch (Exception e) {
123 logger.error(OPERATER_NAME, e);
124 }
125 long endTime = System.currentTimeMillis();
126 logger.info(OPERATER_NAME + "共计耗时:" + (endTime - beginTime) + "ms");
127 return respStr;
128 }
129
130 }

jar依赖如图
编写测试类测试:

1 public static void main(String[] args) throws Exception {
2 JSONObject json = new JSONObject();
3 json.put("action", "test");
4 URL url = new URL("http://localhost:8080/TPSServer/door.do");
5 String resp = post(url, json.toString());
6 System.out.println(resp);
7 }

控制台输出结果:

1 2017-07-26 11:17:09 GMT+08:00 INFO com.sunyard.util.HTTPUtils 106 doPost - 【HTTP操作】开始post通信,目标host:http://localhost:8080/TPSServer/door.do
2 2017-07-26 11:17:09 GMT+08:00 INFO com.sunyard.util.HTTPUtils 107 doPost - 通信内容:{"action":"test"}
3 2017-07-26 11:17:10 GMT+08:00 INFO com.sunyard.util.HTTPUtils 119 doPost - 【HTTP操作】通讯完成,返回码:200
4 2017-07-26 11:17:10 GMT+08:00 INFO com.sunyard.util.HTTPUtils 120 doPost - 【HTTP操作】返回内容:{"errorcode":"0","errormsg":"success"}
5 2017-07-26 11:17:10 GMT+08:00 INFO com.sunyard.util.HTTPUtils 121 doPost - 【HTTP操作】结束..返回结果:{"errorcode":"0","errormsg":"success"}
6 2017-07-26 11:17:10 GMT+08:00 INFO com.sunyard.util.HTTPUtils 128 doPost - 【HTTP操作】共计耗时:579ms
7 {"errorcode":"0","errormsg":"success"}

HttpClient工具包的使用,请大家参考。
from: https://www.cnblogs.com/yujiwei/p/7238613.html
如何使用HttpClient包实现JAVA发起HTTP请求?的更多相关文章
- 关于java发起http请求
我们到底能走多远系列(41) 扯淡: 好久没总结点东西了,技术上没什么总结,感觉做事空牢牢的.最近也比较疲惫. 分享些东西,造福全人类~ 主题: 1,java模拟发起一个http请求 使用HttpUR ...
- 用Java发起HTTP请求与获取状态码(含状态码列表)
转自:https://blog.csdn.net/xyw591238/article/details/51072697 在使用Java请求Web程序比如访问WebService接口时,通常需要先判断访 ...
- java发起HTTP请求的共用类
一定要注意编码,请求时,content-type里的编码,仅仅是流的编码,而结果的编码类型,则是流转化为字符串是需要设定的. 以下是3种使用get/post的方式: import java.io.Bu ...
- python 发起HTTP请求
因为微信公众号群发需要调用高级群发接口,其中涉及到python发起HTTP请求,现在将相关实现操作记录如下: 首先,HTTP请求分为GET和POST,如下所示: 首先是发起get 请求: # -*- ...
- Java网络编程:利用apache的HttpClient包进行http操作
本文介绍如何利用apache的HttpClient包进行http操作,包括get操作和post操作. 一.下面的代码是对HttpClient包的封装,以便于更好的编写应用代码. import java ...
- [Java] 两种发起POST请求方法,并接收返回的响应内容的处理方式
1.利用apache提供的commons-httpclient-3.0.jar包 代码如下: /** * 利用HttpClient发起POST请求,并接收返回的响应内容 * * @param url ...
- java自动化测试-http请求结合抓包工具实际应用
继上文我编写了java的get请求与post请求之后,我现在开始写一下实际操作 很多人有疑问,接口测试的代码是哪里来的,怎么来的呢?看得见吗?我来做一个简单的演示 我们这里简单介绍一下抓包工具,对于一 ...
- java中两种发起POST请求,并接收返回的响应内容的方式 (转)
http://xyz168000.blog.163.com/blog/static/21032308201162293625569/ 2.利用java自带的java.net.*包下提供的工具类 代码如 ...
- Android导包导致java.lang.NoClassDefFoundError
摘要: SDK方法总数是不能超过65k的.是否也引入其他的三方库,导致总数超过限制.超出限制会导致部分class找不到,引发java.lang.NoClassDefFoundError.解决方法:近日 ...
随机推荐
- Codeforces 765F Souvenirs 线段树 + 主席树 (看题解)
Souvenirs 我们将询问离线, 我们从左往右加元素, 如果当前的位置为 i ,用一棵线段树保存区间[x, i]的答案, 每次更新完, 遍历R位于 i 的询问更新答案. 我们先考虑最暴力的做法, ...
- Flask--第三个例子,写一个接口,该接口返回html前端页面,模板的使用
将接口数据返回至html前端页面有两种方法 方法一: 1 @app.route('/index',methods=['get']) 2 def open_index(): 3 page=open(' ...
- Date类的使用
[构造方法] 1)Date():无参构造 [代码] Date date = new Date(); System.out.println(date); 2)Date(long time):带参构造 [ ...
- Period kmp
For each prefix of a given string S with N characters (each character has an ASCII code between 97 a ...
- 搭建TensorFlow中碰到的一些问题(TensorBoard不是内部或外部指令也不是可运行的程序)~
一.windows10环境+pip python软件包(最新版)+Pycharm软件(过段时间在弄下CUDA和GPU吧) 直接使用pip指令来安装tensorflow软件(如果很久没有更新pip软件包 ...
- Maya mayapy.exe 安装 Cython,编译 pyd
Maya mayapy.exe 安装 Cython,编译 pyd 前言 在 Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑 中最后提到,使用 VCForPy ...
- Team Queue POJ - 2259 (队列)
Queues and Priority Queues are data structures which are known to most computer scientists. The Team ...
- 数据结构之二叉搜索树、AVL自平衡树
前言 最近在帮公司校招~~ 所以来整理一些数据结构方面的知识,这些知识呢,光看一遍理解还是很浅的,看过跟动手做过一遍的同学还是很容易分辨的哟~ 一直觉得数据结构跟算法,就好比金庸小说里的<九阳神 ...
- js异步梳理:1.从浏览器的多进程到JS的单线程,理解JS运行机制
大家很早就知道JS是一门单线程的语言.但是也时不时的会看到进程这个词.首先简单区分下线程和进程的概念 1. 简单理解进程 - 进程是一个工厂,工厂有它的独立资源 - 工厂之间相互独立 - 线程是工厂中 ...
- java date HHmmss hhmmss
系统交互时,用到时间流水号的设计,出现时间流水号相同的情况,故对时间格式化各种情况做了研究 SimpleDateFormat(format) format:年月日 yyyyMMdd时分秒 HHmm ...