java httputils_JavaHttpUtils工具类

JavaHttpUtils.java

package com.imddysc.monitor.utils;

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.HashMap;

import java.util.Map;

import java.util.Set;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class JavaHttpUtils {

private static final Logger logger = LoggerFactory.getLogger(JavaHttpUtils.class);

/** 支持的请求类型 */

private static enum HttpMethod {

POST, DELETE, GET, PUT, HEAD;

};

@SuppressWarnings({ "unchecked", "rawtypes" })

private static String invokeUrl(String url, Map params, Map headers, int connectTimeout,

int readTimeout, String encoding, HttpMethod method) {

// 构造请求参数字符串

StringBuilder paramsStr = null;

if (params != null) {

paramsStr = new StringBuilder();

Set 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 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请求,语义为“增加”

* 注意: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请求,语义为“增加”

* 注意: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 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 headers, int connectTimeout, int readTimeout,

String charset) {

return invokeUrl(url, params, headers, connectTimeout, readTimeout, charset, HttpMethod.GET);

}

/**

* PUT方法提交Http请求,语义为“更改”

* 注意: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请求,语义为“更改”

* 注意: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 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 headers, int connectTimeout,

int readTimeout, String charset) {

return invokeUrl(url, params, headers, connectTimeout, readTimeout, charset, HttpMethod.DELETE);

}

/**

* HEAD方法提交Http请求,语义同GET方法

* 跟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方法

* 跟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 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 =

// JavaHttpUtils.get("https://www.baidu.com", params, 3000, 3000, "UTF-8");

// System.out.println(str);

//}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值