package com.fr.plugin; import com.fr.base.FRContext; import com.fr.base.ServerConfig; import com.fr.base.TemplateUtils; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import com.fr.third.org.apache.commons.io.IOUtils; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * http请求工具类 * * @author fr.open */ public class HttpUtils { /** * 返回当前系统的回调地址 * * @return */ public static String getCallBackUrl(HttpServletRequest req) { StringBuilder url = new StringBuilder(); try { url.append(req.getScheme()); url.append("://"); url.append(req.getServerName()); if (req.getServerPort() != 80) { url.append(":"); url.append(req.getServerPort()); } url.append(TemplateUtils.render("${fineServletURL}")); url.append("/url/authorizationCallback"); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } return url.toString(); } /** * 返回当前系统的根路径 * * @return */ public static String getDefaultUrl(HttpServletRequest req) { StringBuilder url = new StringBuilder(); try { url.append(req.getScheme()); url.append("://"); url.append(req.getServerName()); if (req.getServerPort() != 80) { url.append(":"); url.append(req.getServerPort()); } url.append(TemplateUtils.render("${fineServletURL}")); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } return url.toString(); } /** * get请求方式 * * @param path * @return */ public static String httpGet(String path,String token) { StringBuffer buffer = new StringBuffer(); try { URL url = new URL(path); //打开和url之间的连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); conn.setRequestProperty("Accept-Charset", "UTF-8"); conn.setRequestProperty("token", token); conn.setRequestMethod("GET"); conn.connect(); //构造一个字符流缓存 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = reader.readLine()) != null) { buffer.append(new String(line.getBytes(), "UTF-8")); } //关闭流 reader.close(); conn.disconnect(); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } return buffer.toString(); } /** * post请求方法 * * @param path * @param param */ public static String httpPost(String path, Map param) { String var3 = getParam(param, ServerConfig.getInstance().getServerCharset()); PrintWriter var4 = null; BufferedReader var5 = null; String var6 = ""; HttpURLConnection var8=null; try { URL var7 = new URL(path); var8 = (HttpURLConnection) var7.openConnection(); var8.setRequestProperty("accept", "*/*"); var8.setRequestProperty("connection", "Keep-Alive"); var8.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); var8.setRequestProperty("Accept-Charset", "UTF-8"); var8.setRequestMethod("POST"); var8.setDoOutput(true); var8.setDoInput(true); var4 = new PrintWriter(var8.getOutputStream()); var4.print(var3); var4.flush(); String var9; for (var5 = new BufferedReader(new InputStreamReader(var8.getInputStream(), "UTF-8")); (var9 = var5.readLine()) != null; var6 = var6 + var9) { ; } } catch (Exception var18) { if (var8 != null) { InputStream errorStream = var8.getErrorStream(); if (errorStream != null) { try { String s = IOUtils.toString(errorStream, StandardCharsets.UTF_8); FineLoggerFactory.getLogger().error("resp logger :{}", s); return s; } catch (IOException ioException) { ioException.printStackTrace(); } } } } finally { try { if (var4 != null) { var4.close(); } if (var5 != null) { var5.close(); } } catch (Exception var17) { ; } } return var6; } /** * 发送json 模式的请求 * * @param url * @param param * @return */ public static String sendJsonPost(String url, String param) { FRContext.getLogger().info("请将后面的内容发送给开发者:" + new String(Base64.getUrlEncoder().encode(param.getBytes()))); StringBuilder sb = new StringBuilder(); PrintWriter out = null; BufferedReader in = null; HttpURLConnection conn = null; try { URL realUrl = new URL(url); // 打开和URL之间的连接 conn = (HttpURLConnection) realUrl.openConnection(); FineLoggerFactory.getLogger().info("打开链接:" + conn.toString()); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestMethod("POST"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("Content-Type", "application/json; charset=utf-8"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流,设置utf-8编码 out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), StandardCharsets.UTF_8)); // 发送请求参数 if (StringUtils.isNotBlank(param)) { out.print(param); } FineLoggerFactory.getLogger().info("发送参数[{}]:" + out.toString(), param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; sb = new StringBuilder(); while ((line = in.readLine()) != null) { sb.append(line); } FineLoggerFactory.getLogger().info("接口返回值:" + sb.toString()); } catch (Exception e) { if (conn != null) { InputStream errorStream = ( conn).getErrorStream(); in = new BufferedReader(new InputStreamReader(errorStream)); sb = new StringBuilder(); String line; try { while ((line = in.readLine()) != null) { sb.append(line); } } catch (Exception ee) { } System.out.println("错误响应:=======>>" + sb); } System.out.println("发送 POST 请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输出流、输入流 finally { try { if (null != in) { in.close(); } if (out != null) { out.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return sb.toString(); } private static String getParam(Map var0, String enc) { String var1 = ""; Set var2 = var0.keySet(); Iterator var3 = var2.iterator(); while (var3.hasNext()) { String var4 = (String) var3.next(); String var5 = var0.get(var4) + ""; try { var1 = var1 + (var1.length() == 0 ? "" : "&") + URLEncoder.encode(var4, enc) + "=" + URLEncoder.encode(var5, enc); } catch (Exception var7) { ; } } return var1; } }