You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
265 lines
9.0 KiB
265 lines
9.0 KiB
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<String, Object> 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<String, Object> 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; |
|
} |
|
|
|
}
|
|
|