如何使用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.解决方法:近日 ...
随机推荐
- 【原创】python 豆瓣采集
新手今天刚学python~~~ 有点凌乱~勉强看吧 只能算是给新手看看,见谅 简单版本的 豆瓣采集美图~~~~~~ 美女天天有 有木有~~~ python 3.4 sqlite3 BeautifulS ...
- net core体系-web应用程序-4net core2.0大白话带你入门-2asp.net core新建项目
新建asp.net core项目 开发环境:Windows Server R2 2008 开发工具:Microsoft Visual Studio 2017 新建asp.net core项目 创建 ...
- Codeforces 513E2 Subarray Cuts dp (看题解)
我们肯定要一大一小间隔开来所以 把式子拆出来就是类似这样的形式 s1 - 2 * s2 + 2 * s3 + ...... + sn 然后把状态开成四个, 分别表示在顶部, 在底部, 在顶部到底部的中 ...
- PHP加密解密方法,使用openssl加密解密
/** * des 加密算法 */ function do_mencrypt($input, $key) { if (!function_exists("mcrypt_module_open ...
- 三次Java实验整理汇报:
*第一节 eclipse操作,建Javaproject项目(可直接用中文名命名)->建包与类(名字相同) ->public static void main(String[] args){ ...
- 框架MyBatis
ByBatis MyBatis是Apache的一个开源项目iBatis,iBatis3.x 正式更名为MyBatis ,代码于2013年11月迁移到Github.它是一个基于Java的持久层框架(连数 ...
- 关于XML的简单整理
- 自定义PDO封装类
<?php class Db { protected static $_instance = null; // 定义标识符(通过$_instance值得改变情况,来判定Model类是否被实例化) ...
- 关于pycharm中安装第三方库时报错的解决办法(一)
记录自己的生活! 一.事发背景 在pycharm中直接安装第三方库时因为版本问题总是无法安装成功,事情不大,但是很重要. 二.经过 最开始我自己电脑上安装了Python3.6和Python2. ...
- HDU 2444 二分图判断 (BFS染色)+【匈牙利】
<题目链接> 题目大意: 有N个人,M组互相认识关系互相认识的两人分别为a,b,将所有人划分为两组,使同一组内任何两人互不认识,之后将两个组中互相认识的人安排在一个房间,如果出现单人的情况 ...