原文地址;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. maven打包时包含本地jar

    项目中需要使用maven的打包工具,生成zip压缩包,使用的插件是assembly-plugin.因为一些特殊的原因,需要使用一些本地的jar进行依赖,加载外部jar后编码过程中没有任何问题,但是打包 ...

  2. linux入门系列

    Linux基础入门 常用Linux命令 linux学习笔记-1.man_page linux学习笔记-2.常用命令 linux学习笔记-3.文件相关命令 linux学习笔记-4.系统命令 linux学 ...

  3. 初识thinkphp(5)

    这次主要内容是模型的基本操作 0x01:什么是模型 通过手册的阅览,笼统的说就是,把打开数据库等操作在另一个php文件中进行 以及对变量的规则具体细节,查询,取值等操作进行定义,方便在控制器中直接使用 ...

  4. i春秋CTF web题(1)

    之前边看writeup,边做实验吧的web题,多多少少有些收获.但是知识点都已记不清.所以这次借助i春秋这个平台边做题,就当记笔记一样写写writeup(其实都大部分还是借鉴其他人的writeup). ...

  5. 使用Runnable接口创建线程

    实现Runnable接口的类必须使用Thread类的实例才能创建线程.通过Runnable接口创建线程分为两步: 1.将实现Runnable接口的类实例化. 2.建立一个Thread对象,并将第一步实 ...

  6. Mac下配置Apache服务器

    有的时候,我们需要在内网工作组中分享一些文件或是后台接口没有及时给出,你又想要模拟真实数据,直接在项目里创建plist也可以做到这种需求,但难免让工程变得冗余且看起来比较Low.这个时候就看出配置本地 ...

  7. MikroTik RouterOS安装方法收集(转)

    注意:ROS无法使用U盘安装,如果要使用ISO文件进行安装就必须使用光驱以及刻录成光盘,并且只能使用IDE的光驱. 一.首先了解常见的ROS硬件架构: X86架构(也是最常用的) mipsbe(欧米t ...

  8. WebClient 通过get和post请求api

    //get 请求        string url = string.Format("http://localhost:28450/api/values?str1=a&str2=b ...

  9. win8操作系统下使用telnet客户端

    一.安装Telnet客户端 今天尝试在Win8操作系统下使用telnet客户端连接上搜狐的邮件服务器时,结果出现了'telnet' 不是内部或外部命令,也不是可运行的程序,如下图所示: 上网查了一下原 ...

  10. 在ASP.NET MVC中使用Boostrap实现产品的展示、查询、排序、分页

    在产品展示中,通常涉及产品的展示方式.查询.排序.分页,本篇就在ASP.NET MVC下,使用Boostrap来实现. 源码放在了GitHub: https://github.com/darrenji ...