今天在搭建公司项目框架的时候,发现缺少了一个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. 伪分布式hbase数据迁移汇总

    https://www.jianshu.com/p/990bb550be3b hbase0.94.11(hadoop为1.1.2,此电脑ip为172.19.32.128)向hbase1.1.2 (ha ...

  2. k8s 相关命令

    kompose convert -f docker-compose-pro.yml k8s数据卷挂载: https://blog.csdn.net/wlhdo71920145/article/deta ...

  3. Hive| 压缩| 存储| 调优

    Hadoop压缩配置 修改Hadoop集群具有Snappy压缩方式: 查看hadoop支持的压缩方式 [kris@hadoop101 datas]$ hadoop checknative 将编译好的支 ...

  4. 012 pandas与matplotlib结合制图

    这里以后再补充. 1.折线图

  5. String.IsNullorEmpty()方法的使用

    != null 就是不为null !string.IsNullOrEmpty  不是null且不是""(string.Empty)

  6. Linux下C语言的socket网络编程

    关于详细的服务器建立的步骤以及相关的socket套接字的知识我已经在python socket编程的文章中提到过了,大家可以参看那一篇博客来历接socket套接字编程的内容,由于要是用C相关的API所 ...

  7. 可编辑DIV与移动端软键盘兼容性问题汇总

    此文复现的所有兼容性问题均为以下情况: 1. 腾讯X5内核 2. 全屏webview 问题如下: 1. IOS12 中软键盘弹出导致页面顶部截断,并且无法恢复. 解决方法:添加交互事件,调用本地方法, ...

  8. Springboot 1.5.x 集成基于Centos7的RabbitMQ集群安装及配置

    RabbitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件). RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一 ...

  9. linux 学习笔记 执行脚本篇章

    r w x 读 写 执行 4  2  1 如果要启动tomcat服务器 即执行startup.sh 脚本文件 1) #chmod 444 startup.sh  <----增加文本读权限 即  ...

  10. SQL 2016 正式版 安装过程

    1.点击全新安装 2.接着就是下一步,下一步... 3.选择你要安装的功能    [可以利用PolyBase,使用标准TSQL查询hadoop数据,但这里我不需要装] 4.设置排序规则 5.设置登录用 ...