import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* HTTPS工具类.
*
*/
public class HttpUtils {
private static Logger logger = LoggerFactory.getLogger(HttpUtils.class);
private final static int HTTP_ERROR_CODE = 400;
/**
* 发送GET请求.
*
* @param url
* @param param
* @return
*/
public static String sendGet(String url, Map<String, String> paramMap, Map<String, String> headerMap) {
String result = "";// 结果内容
// 绑定参数
if(paramMap != null && !paramMap.isEmpty()){
url = url + "?" + createLinkString(paramMap);
}
try{
// 获取连接
HttpURLConnection httpConn = getHttpURLConnection(url, "GET", headerMap);
// 获取返回结果
if (httpConn.getResponseCode() >= HTTP_ERROR_CODE) {
result = getResultFromStream(httpConn.getErrorStream());
} else {
result = getResultFromStream(httpConn.getInputStream());
}
}catch(Exception e){
logger.error(url + paramMap.toString() + "发送GET请求出现异常!", e);
}
return result;
}
/**
* 发送POST请求.
*
* @param url
* @param param
* @param token
* @return
*/
public static String sendPost(String url, String param, Map<String, String> headerMap) {
String result = "";// 结果内容
try{
// 获取连接
HttpURLConnection httpConn = getHttpURLConnection(url, "POST", headerMap);
// 设置文件长度
httpConn.setRequestProperty("Content-Length", StringUtils.isEmpty(param) ? "0" : String.valueOf(param.getBytes().length));
// 添加参数信息
setParamToStream(httpConn.getOutputStream(), StringUtils.isEmpty(param) ? "" : param);
// 获取返回结果
if (httpConn.getResponseCode() >= HTTP_ERROR_CODE) {
result = getResultFromStream(httpConn.getErrorStream());
} else {
result = getResultFromStream(httpConn.getInputStream());
}
}catch(Exception e){
logger.error(url + param + "发送POST请求出现异常!", e);
}
return result;
}
/**
* 获取请求连接.
*
* @param url
* @param method
* @param token
* @return
* @throws IOException
*/
private static HttpURLConnection getHttpURLConnection(String url, String method, Map<String, String> headerMap) throws IOException {
URL httpUrl = new URL(url);
HttpURLConnection httpConn = (HttpURLConnection) httpUrl.openConnection();
httpConn.setRequestMethod(method);
// post请求参数
if("POST".equals(method.toUpperCase())){
httpConn.setDoInput(true);
httpConn.setDoOutput(true);
}
httpConn.setRequestProperty("accept", "*/*");
httpConn.setRequestProperty("connection", "Keep-Alive");
httpConn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
// header中添加的内容
if(headerMap != null && !headerMap.isEmpty()){
for (String key : headerMap.keySet()) {
httpConn.setRequestProperty(key, headerMap.get(key));
}
}
return httpConn;
}
/**
* 从输入流中获取结果信息.
*
* @param is
* @return
* @throws IOException
*/
private static String getResultFromStream(InputStream is){
String result = "";
BufferedReader in = null;
try{
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(is,"utf-8"));//防止乱码
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
logger.error("从输入流中获取结果信息出现异常!", e);
}
// 使用finally块来关闭输出流
finally{
try{
if(in != null){
in.close();
}
}
catch(Exception ex){
logger.error("关闭输入流出现异常!", ex);
}
}
return result;
}
/**
* 向输出流中添加参数内容.
*
* @param os
* @param param
* @throws IOException
*/
private static void setParamToStream(OutputStream os, String param){
OutputStreamWriter out = null;
try {
// 获取URLConnection对象对应的输出流
out = new OutputStreamWriter(os, "UTF-8");
// 发送请求参数
out.write(param);
// flush输出流的缓冲
out.flush();
} catch (Exception e) {
logger.error(param + "向输出流中添加参数内容出现异常!", e);
}
// 使用finally块来关闭输出流
finally{
try{
if(out != null){
out.close();
}
}
catch(Exception ex){
logger.error(param + "关闭输出流出现异常!", ex);
}
}
}
/**
* 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
*
* @param params
* 需要排序并参与字符拼接的参数组
* @return 拼接后字符串
*/
private static String createLinkString(Map<String, String> params) {
List<String> keys = new ArrayList<String>(params.keySet());
Collections.sort(keys);
StringBuffer prestr = new StringBuffer();
for (int i = 0; i < keys.size(); i++) {
String key = keys.get(i);
String value = params.get(key);
if (i == keys.size() - 1) {
// 拼接时,不包括最后一个&字符
prestr.append(key).append("=").append(value);
} else {
prestr.append(key).append("=").append(value).append("&");
}
}
return prestr.toString();
}
}
HttpUtils は外部インターフェイスを呼び出します
おすすめ
転載: blog.csdn.net/weixin_43832604/article/details/110639667
おすすめ
ランキング