微信后端代码
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.

387 lines
14 KiB

package com.ynxbd.common.helper.common;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Date;
public class ProxyHelper {
private static final Logger logger = LoggerFactory.getLogger(ProxyHelper.class);
public static String post(String httpUrl, String proxyIp, Integer port, HttpServletRequest req, HttpServletResponse resp) throws IOException {
servletConfig(req, resp);
BufferedReader in = null;
BufferedReader reader = null;
HttpURLConnection connection = null;
// 方法
String method = req.getMethod();
// 参数
String params = req.getQueryString();
String contentType = req.getContentType();
try {
URL url = new URL(httpUrl + "?" + params);
//设置代理
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyIp, port));
connection = (HttpURLConnection) url.openConnection(proxy);
connection.setRequestMethod(method);
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
if (contentType == null) {
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
} else {
connection.setRequestProperty("Content-Type", contentType);
}
connection.setDoOutput(true);
connection.setDoInput(true);
connection.connect();
int status = connection.getResponseCode();
String message = connection.getResponseMessage();
String requestURI = req.getRequestURI();
logger.info("{}-{}-{url:[{}],contentType-[{}],status:[{}], message:[{}]}", method, requestURI, url, contentType, status, message);
// 读取响应数据
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
resp.setStatus(status);
servletResp(result.toString(), resp);
} catch (IOException e) {
// 响应失败信息
servletResp(e.toString(), resp);
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
if (connection != null) {
// 断开连接
connection.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
public static String get(String httpUrl, String proxyIp, Integer port, HttpServletRequest req, HttpServletResponse resp) {
servletConfig(req, resp);
String header = resp.getContentType();
BufferedReader reader = null;
HttpURLConnection connection = null;
// 方法
String method = req.getMethod();
// 参数
String params = req.getQueryString();
String contentType = req.getContentType();
try {
URL url = new URL(httpUrl + "?" + params);
//设置代理
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyIp, port));
connection = (HttpURLConnection) url.openConnection(proxy);
connection.setRequestMethod(method);
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
connection.setRequestProperty("Content-Type", contentType == null ? "application/x-www-form-urlencoded" : contentType);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.connect();
int status = connection.getResponseCode();
String message = connection.getResponseMessage();
String requestURI = req.getRequestURI();
logger.info("{}-{}-{url:[{}],contentType-[{}],status:[{}], message:[{}]}", method, requestURI, url, contentType, status, message);
// 读取响应数据
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
resp.setStatus(status);
servletResp(result.toString(), resp);
} catch (IOException e) {
// 响应失败信息
servletResp(e.toString(), resp);
e.printStackTrace();
} finally {
try {
if (reader != null) reader.close();
if (connection != null) connection.disconnect(); // 断开连接
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
public static String down(String httpUrl, String proxyIp, Integer port, HttpServletRequest req, HttpServletResponse resp, String msgInterface) {
servletConfig(req, resp);
BufferedReader reader = null;
HttpURLConnection connection = null;
// 方法
String method = req.getMethod();
// 参数
String params = req.getQueryString();
String contentType = req.getContentType();
InputStream in = null;
ServletOutputStream out = null;
try {
URL url = new URL(httpUrl + "?" + params);
//设置代理
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyIp, port));
connection = (HttpURLConnection) url.openConnection(proxy);
connection.setRequestMethod("GET");
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
connection.setRequestProperty("Content-Type", contentType == null ? "application/x-www-form-urlencoded" : contentType);
if (msgInterface != null) resp.setContentType(msgInterface);
resp.addHeader("Content-Disposition", "attachment; filename=" + new Date().getTime() + ".dcm");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.connect();
int status = connection.getResponseCode();
String message = connection.getResponseMessage();
String requestURI = req.getRequestURI();
String respContentType = resp.getContentType();
resp.setStatus(status);
logger.info("{}-{}-{url:[{}],contentType-[{}],respContentType-[{}]status:[{}], message:[{}]}", method, requestURI, url, contentType, respContentType, status, message);
// 读取响应数据
in = connection.getInputStream();
// byte[] getData = readInputStream(in);
out = resp.getOutputStream();
byte[] buff = new byte[1024 * 1024];
while (in.read(buff) != -1) out.write(buff);
//\\DESKTOP-QKUSP27\pacs
// 读取响应数据
// reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
// StringBuilder result = new StringBuilder();
// String line;
// while ((line = reader.readLine()) != null) {
// result.append(line).append("\n");
// }
// servletResp(result.toString(), resp);
} catch (IOException e) {
// 响应失败信息
servletResp(e.toString(), resp);
e.printStackTrace();
} finally {
try {
if (reader != null) reader.close();
if (out != null) out.close();
if (in != null) in.close();
if (connection != null) connection.disconnect(); // 断开连接
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 从输入流中获取字节数组
*
* @param is 输入流
* @return
*/
public static byte[] readInputStream(InputStream is) {
ByteArrayOutputStream bos = null;
while (true) {
try {
bos = new ByteArrayOutputStream();
int len;
byte[] buffer = new byte[1024];
if ((len = is.read(buffer)) == -1) break;
bos.write(buffer, 0, len);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bos != null) bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return bos.toByteArray();
}
public static void servletConfig(HttpServletRequest req, HttpServletResponse resp) {
try {
req.setCharacterEncoding("utf-8");
// resp.setCharacterEncoding("utf-8");
// resp.setContentType("application/json;charset=utf-8");
/* 允许跨域的主机地址 */
resp.setHeader("Access-Control-Allow-Origin", "*");
/* 允许跨域的请求方法GET, POST, HEAD 等 */
resp.setHeader("Access-Control-Allow-Methods", "*");
/* 重新预检验跨域的缓存时间 (s) */
resp.setHeader("Access-Control-Max-Age", "3600");
/* 允许跨域的请求头 */
resp.setHeader("Access-Control-Allow-Headers", "*");
/* 是否携带cookie */
resp.setHeader("Access-Control-Allow-Credentials", "true");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
/**
* 设置响应内容
*
* @param respMsg 响应内容
* @param resp 响应流
*/
protected static void servletResp(String respMsg, HttpServletResponse resp) {
try {
resp.getWriter().write(respMsg);
} catch (IOException e) {
e.printStackTrace();
}
}
// private static class TrustAnyTrustManager implements X509TrustManager {
//
// public void checkClientTrusted(X509Certificate[] chain, String authType) {
// }
//
// public void checkServerTrusted(X509Certificate[] chain, String authType) {
// }
//
// public X509Certificate[] getAcceptedIssuers() {
// return new X509Certificate[]{};
// }
// }
//
// private static class TrustAnyHostnameVerifier implements HostnameVerifier {
// public boolean verify(String hostname, SSLSession session) {
// return true;
// }
// }
// public static String HttpsProxy(String url, String param, String proxy, int port) {
// HttpsURLConnection httpsConn = null;
// PrintWriter out = null;
// BufferedReader in = null;
// StringBuilder result = new StringBuilder();
// BufferedReader reader = null;
// try {
// URL urlClient = new URL(url);
// System.out.println("请求的URL========:" + urlClient);
//
// SSLContext sc = SSLContext.getInstance("SSL");
// // 指定信任https
// sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
// //创建代理虽然是https也是Type.HTTP
// Proxy proxy1 = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy, port));
// //设置代理
// httpsConn = (HttpsURLConnection) urlClient.openConnection(proxy1);
//
// httpsConn.setSSLSocketFactory(sc.getSocketFactory());
// httpsConn.setHostnameVerifier(new TrustAnyHostnameVerifier());
// // 设置通用的请求属性
// httpsConn.setRequestProperty("accept", "*/*");
// httpsConn.setRequestProperty("connection", "Keep-Alive");
// httpsConn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// // 发送POST请求必须设置如下两行
// httpsConn.setDoOutput(true);
// httpsConn.setDoInput(true);
// // 获取URLConnection对象对应的输出流
// out = new PrintWriter(httpsConn.getOutputStream());
// // 发送请求参数
// out.print(param);
// // flush输出流的缓冲
// out.flush();
// // 定义BufferedReader输入流来读取URL的响应
// in = new BufferedReader(
// new InputStreamReader(httpsConn.getInputStream()));
// String line;
// while ((line = in.readLine()) != null) {
// result.append(line);
// }
// // 断开连接
// httpsConn.disconnect();
// System.out.println("====result====" + result);
// System.out.println("返回结果:" + httpsConn.getResponseMessage());
//
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// try {
// if (reader != null) {
// reader.close();
// }
// } catch (IOException e) {
// }
// try {
// if (in != null) {
// in.close();
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
// if (out != null) {
// out.close();
// }
// }
//
// return result.toString();
// }
}