原文地址;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的更多相关文章

  1. Java 发送 Https 请求工具类 (兼容http)

    依赖 jsoup-1.11.3.jar <dependency> <groupId>org.jsoup</groupId> <artifactId>js ...

  2. Java原生隐藏字符-工具类

    package com.seesun2012.common.util; /** 隐藏字符-工具类 @author seesun2012@163.com */ public class HiddenCh ...

  3. 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 ...

  4. Java模仿http请求工具类

    package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...

  5. Java 实现 Http 请求工具类

    package com.demo.util; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...

  6. Java进行http请求工具类代码(支持https)

    package com.guyezhai.modules.utils; import java.io.BufferedReader; import java.io.DataOutputStream; ...

  7. Java 发送 Http请求工具类

    HttpClient.java package util; import java.io.BufferedReader; import java.io.IOException; import java ...

  8. Http请求工具类(Java原生Form+Json)

    package com.tzx.cc.common.constant.util; import java.io.IOException; import java.io.InputStream; imp ...

  9. java jdk原生的http请求工具类

    package com.base; import java.io.IOException; import java.io.InputStream; import java.io.InputStream ...

随机推荐

  1. 升级到AndroidStudio3.2.1的注意事项

    升级到AndroidStudio3.2.1的注意事项     即不用再在二级结构的build.gradle中的compileSdkVersion 28 下声明 buildToolsVersion &q ...

  2. 循序渐进学.Net Core Web Api开发系列【5】:文件上传

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍通 ...

  3. ueditor上传图片设置的简单实例

    0.前言:我用过ckeditor,kingeditor还是感觉ueditor最好用,功能强大,经常更新.之前因为升级了struts2到2.5的了,原本的kingeditor已经不能共存,于是找到了ud ...

  4. spring-boot 速成(7) 集成dubbo

    github上有一个开源项目spring-boot-starter-dubbo 提供了spring-boot与dubbo的集成功能,直接拿来用即可.(记得给作者点赞,以示感谢!) 下面是使用步骤,先看 ...

  5. .Net 环境下C# 通过托管C++调用本地C++ Dll文件

     综述 : 本文章介绍.Net 环境下C# 通过托管C++调用本地C++ Dll文件, 示例环境为:VS2010, .Net4.0, Win7. 具体事例为测试C++, C#, 及C#调用本地C++D ...

  6. LPC-LINK 2 LPC4337 TQFP144 IO

  7. LPC18xx and LPC43xx 选型及差异

    Q LPC43xx和LPC18xx有相同的USB接口以及片内USB驱动吗?A 是的. Q LPC4300和LPC1800只是内核不同吗?外设和管脚配置都完全一致?A 为LPC18xx的映像可以直接在L ...

  8. C++ STL set::find的用法

      参考: http://blog.csdn.net/lihao21/article/details/6302196 /* class for function predicate * - opera ...

  9. Modbus TCP和Modbus Rtu协议的区别 转

    http://blog.csdn.net/educast/article/details/9177679   Modbus rtu和Modbus tcp两个协议的本质都是MODBUS协议,都是靠MOD ...

  10. ASP.NET MVC遍历ModelState的错误信息

    在ASP.NET MVC中,ModelState中包含了验证失败的错误信息,具体被存储在ModelState.Values[i].Errors[j].ErrorMessage属性中.当然,通过打断点, ...