基于JAVA原生HTTP请求工具类 httphelper
原文地址;http://lushuifa.iteye.com/blog/2313896
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import java.util.Set; import org.apache.log4j.Logger; /**
* 提供通过HTTP协议获取内容的方法 <br/>
* 所有提供方法中的params参数在内部不会进行自动的url encode,如果提交参数需要进行url encode,请调用方自行处理
* @Description: HTTP请求代理工具
* @author lushuifa
* @date 2016年11月18日 上午11:21:05
*/
public class HttpUtil {
/**
* logger
*/
private static Logger logger = Logger.getLogger(HttpUtil.class); /**
* 支持的Http method
*
*/
private static enum HttpMethod {
POST,DELETE,GET,PUT,HEAD;
}; @SuppressWarnings({ "unchecked", "rawtypes" })
private static String invokeUrl(String url, Map params, Map<String,String> headers, int connectTimeout, int readTimeout, String encoding, HttpMethod method){
//构造请求参数字符串
StringBuilder paramsStr = null;
if(params != null){
paramsStr = new StringBuilder();
Set<Map.Entry> entries = params.entrySet();
for(Map.Entry entry:entries){
String value = (entry.getValue()!=null)?(String.valueOf(entry.getValue())):"";
paramsStr.append(entry.getKey() + "=" + value + "&");
}
//只有POST方法才能通过OutputStream(即form的形式)提交参数
if(method != HttpMethod.POST){
url += "?"+paramsStr.toString();
}
} URL uUrl = null;
HttpURLConnection conn = null;
BufferedWriter out = null;
BufferedReader in = null;
try {
//创建和初始化连接
uUrl = new URL(url);
conn = (HttpURLConnection) uUrl.openConnection();
conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
conn.setRequestMethod(method.toString());
conn.setDoOutput(true);
conn.setDoInput(true);
//设置连接超时时间
conn.setConnectTimeout(connectTimeout);
//设置读取超时时间
conn.setReadTimeout(readTimeout);
//指定请求header参数
if(headers != null && headers.size() > 0){
Set<String> headerSet = headers.keySet();
for(String key:headerSet){
conn.setRequestProperty(key, headers.get(key));
}
} if(paramsStr != null && method == HttpMethod.POST){
//发送请求参数
out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(),encoding));
out.write(paramsStr.toString());
out.flush();
} //接收返回结果
StringBuilder result = new StringBuilder();
in = new BufferedReader(new InputStreamReader(conn.getInputStream(),encoding));
if(in != null){
String line = "";
while ((line = in.readLine()) != null) {
result.append(line);
}
}
return result.toString();
} catch (Exception e) {
logger.error("调用接口["+url+"]失败!请求URL:"+url+",参数:"+params,e);
//处理错误流,提高http连接被重用的几率
try {
byte[] buf = new byte[100];
InputStream es = conn.getErrorStream();
if(es != null){
while (es.read(buf) > 0) {;}
es.close();
}
} catch (Exception e1) {
e1.printStackTrace();
}
} finally {
try {
if (out!=null) {
out.close();
}
}catch (Exception e) {
e.printStackTrace();
}
try {
if (in !=null) {
in.close();
}
}catch (Exception e) {
e.printStackTrace();
}
//关闭连接
if (conn != null){
conn.disconnect();
}
}
return null;
} /**
* POST方法提交Http请求,语义为“增加” <br/>
* 注意:Http方法中只有POST方法才能使用body来提交内容
* @param url 资源路径(如果url中已经包含参数,则params应该为null)
* @param params 参数
* @param connectTimeout 连接超时时间(单位为ms)
* @param readTimeout 读取超时时间(单位为ms)
* @param charset 字符集(一般该为“utf-8”)
* @return
*/
public static String post(String url, Map params, int connectTimeout, int readTimeout, String charset){
return invokeUrl(url,params,null,connectTimeout,readTimeout,charset,HttpMethod.POST);
} /**
* POST方法提交Http请求,语义为“增加” <br/>
* 注意:Http方法中只有POST方法才能使用body来提交内容
* @param url 资源路径(如果url中已经包含参数,则params应该为null)
* @param params 参数
* @param headers 请求头参数
* @param connectTimeout 连接超时时间(单位为ms)
* @param readTimeout 读取超时时间(单位为ms)
* @param charset 字符集(一般该为“utf-8”)
* @return
*/
public static String post(String url, Map params, Map<String,String> headers, int connectTimeout, int readTimeout, String charset){
return invokeUrl(url,params,headers,connectTimeout,readTimeout,charset,HttpMethod.POST);
} /**
* GET方法提交Http请求,语义为“查询”
* @param url 资源路径(如果url中已经包含参数,则params应该为null)
* @param params 参数
* @param connectTimeout 连接超时时间(单位为ms)
* @param readTimeout 读取超时时间(单位为ms)
* @param charset 字符集(一般该为“utf-8”)
* @return
*/
public static String get(String url, Map params, int connectTimeout, int readTimeout, String charset){
return invokeUrl(url,params,null,connectTimeout,readTimeout,charset,HttpMethod.GET);
} /**
* GET方法提交Http请求,语义为“查询”
* @param url 资源路径(如果url中已经包含参数,则params应该为null)
* @param params 参数
* @param headers 请求头参数
* @param connectTimeout 连接超时时间(单位为ms)
* @param readTimeout 读取超时时间(单位为ms)
* @param charset 字符集(一般该为“utf-8”)
* @return
*/
public static String get(String url, Map params, Map<String,String> headers,int connectTimeout, int readTimeout, String charset){
return invokeUrl(url,params,headers,connectTimeout,readTimeout,charset,HttpMethod.GET);
} /**
* PUT方法提交Http请求,语义为“更改” <br/>
* 注意:PUT方法也是使用url提交参数内容而非body,所以参数最大长度收到服务器端实现的限制,Resin大概是8K
* @param url 资源路径(如果url中已经包含参数,则params应该为null)
* @param params 参数
* @param connectTimeout 连接超时时间(单位为ms)
* @param readTimeout 读取超时时间(单位为ms)
* @param charset 字符集(一般该为“utf-8”)
* @return
*/
public static String put(String url, Map params, int connectTimeout, int readTimeout, String charset){
return invokeUrl(url,params,null,connectTimeout,readTimeout,charset,HttpMethod.PUT);
} /**
* PUT方法提交Http请求,语义为“更改” <br/>
* 注意:PUT方法也是使用url提交参数内容而非body,所以参数最大长度收到服务器端实现的限制,Resin大概是8K
* @param url 资源路径(如果url中已经包含参数,则params应该为null)
* @param params 参数
* @param headers 请求头参数
* @param connectTimeout 连接超时时间(单位为ms)
* @param readTimeout 读取超时时间(单位为ms)
* @param charset 字符集(一般该为“utf-8”)
* @return
*/
public static String put(String url, Map params, Map<String,String> headers,int connectTimeout, int readTimeout, String charset){
return invokeUrl(url,params,headers,connectTimeout,readTimeout,charset,HttpMethod.PUT);
} /**
* DELETE方法提交Http请求,语义为“删除”
* @param url 资源路径(如果url中已经包含参数,则params应该为null)
* @param params 参数
* @param connectTimeout 连接超时时间(单位为ms)
* @param readTimeout 读取超时时间(单位为ms)
* @param charset 字符集(一般该为“utf-8”)
* @return
*/
public static String delete(String url, Map params, int connectTimeout, int readTimeout, String charset){
return invokeUrl(url,params,null,connectTimeout,readTimeout,charset,HttpMethod.DELETE);
} /**
* DELETE方法提交Http请求,语义为“删除”
* @param url 资源路径(如果url中已经包含参数,则params应该为null)
* @param params 参数
* @param headers 请求头参数
* @param connectTimeout 连接超时时间(单位为ms)
* @param readTimeout 读取超时时间(单位为ms)
* @param charset 字符集(一般该为“utf-8”)
* @return
*/
public static String delete(String url, Map params, Map<String,String> headers, int connectTimeout, int readTimeout, String charset){
return invokeUrl(url,params,headers,connectTimeout,readTimeout,charset,HttpMethod.DELETE);
} /**
* HEAD方法提交Http请求,语义同GET方法 <br/>
* 跟GET方法不同的是,用该方法请求,服务端不返回message body只返回头信息,能节省带宽
* @param url 资源路径(如果url中已经包含参数,则params应该为null)
* @param params 参数
* @param connectTimeout 连接超时时间(单位为ms)
* @param readTimeout 读取超时时间(单位为ms)
* @param charset 字符集(一般该为“utf-8”)
* @return
*/
public static String head(String url, Map params, int connectTimeout, int readTimeout, String charset){
return invokeUrl(url,params,null,connectTimeout,readTimeout,charset,HttpMethod.HEAD);
} /**
* HEAD方法提交Http请求,语义同GET方法 <br/>
* 跟GET方法不同的是,用该方法请求,服务端不返回message body只返回头信息,能节省带宽
* @param url 资源路径(如果url中已经包含参数,则params应该为null)
* @param params 参数
* @param headers 请求头参数
* @param connectTimeout 连接超时时间(单位为ms)
* @param readTimeout 读取超时时间(单位为ms)
* @param charset 字符集(一般该为“utf-8”)
* @return
*/
public static String head(String url, Map params, Map<String,String> headers, int connectTimeout, int readTimeout, String charset){
return invokeUrl(url,params,headers,connectTimeout,readTimeout,charset,HttpMethod.HEAD);
} public static void main(String[] args) {
//Map params = new HashMap();
//params.put("phoneNo", "中文");
//String str = HttpUtil.get("http://localhost:9092/elis_smp_als_dmz/do/app/activitySupport/demo", params, 3000, 3000, "UTF-8");
//System.out.println(str);
} }
基于JAVA原生HTTP请求工具类 httphelper的更多相关文章
- Java 发送 Https 请求工具类 (兼容http)
依赖 jsoup-1.11.3.jar <dependency> <groupId>org.jsoup</groupId> <artifactId>js ...
- Java原生隐藏字符-工具类
package com.seesun2012.common.util; /** 隐藏字符-工具类 @author seesun2012@163.com */ public class HiddenCh ...
- Java之网络请求工具类(依赖:org.apache.http;注:HttpClient 4.4,HttpCore 4.4)
到此处可以去下载依赖包:http://hc.apache.org/downloads.cgi import java.util.List; import org.apache.http.HttpSta ...
- Java模仿http请求工具类
package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...
- Java 实现 Http 请求工具类
package com.demo.util; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...
- Java进行http请求工具类代码(支持https)
package com.guyezhai.modules.utils; import java.io.BufferedReader; import java.io.DataOutputStream; ...
- Java 发送 Http请求工具类
HttpClient.java package util; import java.io.BufferedReader; import java.io.IOException; import java ...
- Http请求工具类(Java原生Form+Json)
package com.tzx.cc.common.constant.util; import java.io.IOException; import java.io.InputStream; imp ...
- java jdk原生的http请求工具类
package com.base; import java.io.IOException; import java.io.InputStream; import java.io.InputStream ...
随机推荐
- Ubuntu系统无法获得锁/var/lib/dpkg/lock - open (11: 资源暂时不可用)的解决方案
Ubuntu系统无法获得锁/var/lib/dpkg/lock - open (11: 资源暂时不可用)的解决方案 问题 使用Ubuntu打开终端时,输入带有sudo apt-get 命令行是 ...
- Selenium Webdriver概述(转)
Selenium Webdriver https://www.yiibai.com/selenium/selenium_overview.html# webdriver自动化俗称Selenium 2. ...
- 001.KVM介绍
KVM介绍可参考: http://liqingbiao.blog.51cto.com/3044896/1740516 http://koumm.blog.51cto.com/703525/128879 ...
- 003.SSH密钥对登陆
一 需求背景 master:172.24.8.30 client-01:172.24.8.31 client-01:172.24.8.32 client-01:172.24.8.33 在master上 ...
- 【Ray Tracing in One Weekend 超详解】 光线追踪1-1
Preface 从这一篇起,我们开始学光线追踪这门牛逼的技术.读了几天,一个字:强! 这一篇我们主要讲述技术入门和一些简单的案例. 我们先学这本: Ready 这本书需要ppmview这个软件帮忙看效 ...
- 前端代码控制gif图暂停与播放的坑
废话不说,先看效果..... 方案一.方案二效果: 方案三效果: <!DOCTYPE html> <html> <head> <meta charse ...
- 常见的网络攻击(XSS,SQL注入,CSRF)
一.XSS 二.SQL注入 三.CSRF
- SmartSVN has inconsistent newlines解决方法
SmartSVN has inconsistent newlines解决方法 点击 Project–>Setting,选择Working copy下的EOL-style,将Default EOL ...
- 20172308《Java软件结构与数据结构》第四周学习总结
教材学习内容总结 第 6 章 列表 一. 列表集合 列表集合:一种概念性表示法,思想是使事物以线性列表的方式进行组织 特点: 列表集合没有内在的容量大小,它可以随着需要而增大 列表集合更具一般化,可以 ...
- Intel P6以来核心架构及对应型号、芯片组一览表
转载或拿走使用请注明出处,谢谢! 注1:5系列以前的芯片组部分可以支持多代处理器(如部分945可以支持65nm.45nm的处理器),5系列开始此现象较少见. 注2:插座兼容性①Socket370接口处 ...