今天在搭建公司项目框架的时候,发现缺少了一个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请求?的更多相关文章

  1. 关于java发起http请求

    我们到底能走多远系列(41) 扯淡: 好久没总结点东西了,技术上没什么总结,感觉做事空牢牢的.最近也比较疲惫. 分享些东西,造福全人类~ 主题: 1,java模拟发起一个http请求 使用HttpUR ...

  2. 用Java发起HTTP请求与获取状态码(含状态码列表)

    转自:https://blog.csdn.net/xyw591238/article/details/51072697 在使用Java请求Web程序比如访问WebService接口时,通常需要先判断访 ...

  3. java发起HTTP请求的共用类

    一定要注意编码,请求时,content-type里的编码,仅仅是流的编码,而结果的编码类型,则是流转化为字符串是需要设定的. 以下是3种使用get/post的方式: import java.io.Bu ...

  4. python 发起HTTP请求

    因为微信公众号群发需要调用高级群发接口,其中涉及到python发起HTTP请求,现在将相关实现操作记录如下: 首先,HTTP请求分为GET和POST,如下所示: 首先是发起get 请求: # -*- ...

  5. Java网络编程:利用apache的HttpClient包进行http操作

    本文介绍如何利用apache的HttpClient包进行http操作,包括get操作和post操作. 一.下面的代码是对HttpClient包的封装,以便于更好的编写应用代码. import java ...

  6. [Java] 两种发起POST请求方法,并接收返回的响应内容的处理方式

    1.利用apache提供的commons-httpclient-3.0.jar包 代码如下: /** * 利用HttpClient发起POST请求,并接收返回的响应内容 * * @param url ...

  7. java自动化测试-http请求结合抓包工具实际应用

    继上文我编写了java的get请求与post请求之后,我现在开始写一下实际操作 很多人有疑问,接口测试的代码是哪里来的,怎么来的呢?看得见吗?我来做一个简单的演示 我们这里简单介绍一下抓包工具,对于一 ...

  8. java中两种发起POST请求,并接收返回的响应内容的方式  (转)

    http://xyz168000.blog.163.com/blog/static/21032308201162293625569/ 2.利用java自带的java.net.*包下提供的工具类 代码如 ...

  9. Android导包导致java.lang.NoClassDefFoundError

    摘要: SDK方法总数是不能超过65k的.是否也引入其他的三方库,导致总数超过限制.超出限制会导致部分class找不到,引发java.lang.NoClassDefFoundError.解决方法:近日 ...

随机推荐

  1. Codeforces 765F Souvenirs 线段树 + 主席树 (看题解)

    Souvenirs 我们将询问离线, 我们从左往右加元素, 如果当前的位置为 i ,用一棵线段树保存区间[x, i]的答案, 每次更新完, 遍历R位于 i 的询问更新答案. 我们先考虑最暴力的做法, ...

  2. Flask--第三个例子,写一个接口,该接口返回html前端页面,模板的使用

     将接口数据返回至html前端页面有两种方法 方法一: 1 @app.route('/index',methods=['get']) 2 def open_index(): 3 page=open(' ...

  3. Date类的使用

    [构造方法] 1)Date():无参构造 [代码] Date date = new Date(); System.out.println(date); 2)Date(long time):带参构造 [ ...

  4. Period kmp

    For each prefix of a given string S with N characters (each character has an ASCII code between 97 a ...

  5. 搭建TensorFlow中碰到的一些问题(TensorBoard不是内部或外部指令也不是可运行的程序)~

    一.windows10环境+pip python软件包(最新版)+Pycharm软件(过段时间在弄下CUDA和GPU吧) 直接使用pip指令来安装tensorflow软件(如果很久没有更新pip软件包 ...

  6. Maya mayapy.exe 安装 Cython,编译 pyd

    Maya mayapy.exe 安装 Cython,编译 pyd 前言 在 Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑 中最后提到,使用  VCForPy ...

  7. Team Queue POJ - 2259 (队列)

    Queues and Priority Queues are data structures which are known to most computer scientists. The Team ...

  8. 数据结构之二叉搜索树、AVL自平衡树

    前言 最近在帮公司校招~~ 所以来整理一些数据结构方面的知识,这些知识呢,光看一遍理解还是很浅的,看过跟动手做过一遍的同学还是很容易分辨的哟~ 一直觉得数据结构跟算法,就好比金庸小说里的<九阳神 ...

  9. js异步梳理:1.从浏览器的多进程到JS的单线程,理解JS运行机制

    大家很早就知道JS是一门单线程的语言.但是也时不时的会看到进程这个词.首先简单区分下线程和进程的概念 1. 简单理解进程 - 进程是一个工厂,工厂有它的独立资源 - 工厂之间相互独立 - 线程是工厂中 ...

  10. java date HHmmss hhmmss

    系统交互时,用到时间流水号的设计,出现时间流水号相同的情况,故对时间格式化各种情况做了研究 SimpleDateFormat(format) format:年月日  yyyyMMdd时分秒  HHmm ...