基于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 ...
随机推荐
- 解决 Could not resolve com.android.tools.build:gradle:3.1.3
android studio 升级到3.1.3后总会遇到莫名其妙的错误,前几天刚解决了项目 dependencies报错的问题. 解决android studio 升级到3.0+之后 项目 dep ...
- Web开发模式演变(转)
add by zhj:目前用的最多应该是模式二,其次是三.四,而模式五比较新,我自己也不太懂. 模式二--前后台交互的方式为整个页面,即每次请求,服务器都将HTML模板渲染后发给客户端,每次请求都返回 ...
- React Native之原生模块的开发(Android)学习笔记
目录 1.为什么我们需要原生模块开发 2.开发Android原生模块的主要流程 3.原生模块开发实战 1.为什么我们需要原生模块开发? 我们在用RN开发App的时候,有时候需要用到一些原生模块 ...
- 日志回滚:python(日志分割)
日志回滚:python 什么是日志回滚? 答: 将日志信息输出到一个单一的文件中,随着应用程序的持续使用,该日志文件会越来越庞大,进而影响系统的性能.因此,有必要对日志文件按某种条件进行切分,要切分日 ...
- MySQL数据库之视图
1 引言 为了简化复杂SQL语句编写,以及提高数据库安全性,MySQL数据库视图特性.视图是一张虚拟表,不在数据库中以储存的数据值形式存在.在开发中,开发者往往只对某些特定数据和所负责的特定任务感兴趣 ...
- Linux-C网络编程
简介 基础是TCP/IP协议,网上资料很多不再赘述. 推荐<图解TCP/IP> socket编程 网络字节序 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出, 接收主机把从网 ...
- Web Service(二):cxf 实现
1. cxf简介 Web Services 的一种实现方式. Apache CXF = Celtix + XFire,后更名为 Apache CXF ,简称为 CXF. CXF 继承了 Celtix ...
- Win7无法添加用户的问题
这段时间搞dcom的东西,然后按照网上说的,用dcomcnfg打开管理器,在dcom中我的电脑里面属性中把默认身份验证级别改为 无.然后再使用的时候,发现win7中的账户管理里面,什么账户都没有了,不 ...
- android 获取sd卡根目录
dir:/storage/emulated/0 也就是 sdcard目录 ====== android 获取sd卡根目录 public String getSDPath(){ File ...
- HDU 4757 Tree 可持久化字典树 trie
http://acm.hdu.edu.cn/showproblem.php?pid=4757 给出一棵树,每个节点有权值,每次查询节点 (u,v) 以及 val,问 u 到 v 路径上的某个节点与 v ...