HttpUtil工具钓株,http get post請(qǐng)求您单,https get post請(qǐng)求斋荞,ajax response,獲取客戶端ip地址虐秦,根據(jù)IP獲取地址平酿,設(shè)置下載響應(yīng),根據(jù)流獲取字符串悦陋。
package com.mvc.utils;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
* 當(dāng)方法為空是默認(rèn)為所有的鏈接都為安全,
* 也就是所有的鏈接都能夠訪問(wèn)到.
* 當(dāng)然這樣有一定的安全風(fēng)險(xiǎn),可以根據(jù)實(shí)際需要寫(xiě)入內(nèi)容.
*
* @author smallk
* @date 2018/7/29 22:15
*/
public class DefaultX509TrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
package com.mvc.utils;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* HttpUtil
*
* @author smallk
* @date 2018/7/29 22:15
*/
@Slf4j
public class HttpUtil {
private static final int READ_TIMEOUT = 60000;
private static final int CONNECT_TIMEOUT = 60000;
/**
* http get request
*/
public static String get(String urlAddr, Map<String, Object> paramsMap, int connectTimeout, int readTimeout) throws Exception {
log.info("get request url: {}, params: {}", urlAddr, JSONObject.toJSONString(paramsMap));
String line;
String params = "";
HttpURLConnection conn = null;
BufferedReader bufferedReader = null;
InputStreamReader inputStreamReader = null;
StringBuffer result = new StringBuffer();
try {
if (connectTimeout < 1) {
connectTimeout = CONNECT_TIMEOUT;
}
if (readTimeout < 1) {
readTimeout = READ_TIMEOUT;
}
if (paramsMap != null && !paramsMap.isEmpty()) {
StringBuffer str = new StringBuffer();
Set set = paramsMap.keySet();
Iterator iter = set.iterator();
while (iter.hasNext()) {
String key = iter.next().toString();
if (paramsMap.get(key) == null) {
continue;
}
str.append(key).append("=").append(paramsMap.get(key)).append("&");
}
if (str.length() > 0) {
params = "?" + str.substring(0, str.length() - 1);
}
}
URL url = new URL(urlAddr + params);
conn = (HttpURLConnection) url.openConnection();
// 設(shè)置讀取超時(shí)時(shí)間
conn.setReadTimeout(readTimeout);
// 設(shè)置連接超時(shí)時(shí)間
conn.setConnectTimeout(connectTimeout);
conn.connect();
inputStreamReader = new InputStreamReader(conn.getInputStream(), "utf-8");
bufferedReader = new BufferedReader(inputStreamReader);
while ((line = bufferedReader.readLine()) != null) {
result.append(line);
}
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (inputStreamReader != null) {
try {
inputStreamReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return result.toString();
}
/**
* http post request
*/
public static String post(String urlAddr, Map<String, Object> paramsMap, int connectTimeout, int readTimeout) throws Exception {
log.info("post request url: {}, params: {}", urlAddr, JSONObject.toJSONString(paramsMap));
String line;
String params = "";
HttpURLConnection conn = null;
BufferedReader bufferedReader = null;
InputStreamReader inputStreamReader = null;
OutputStreamWriter outputStreamWriter = null;
StringBuffer result = new StringBuffer();
try {
if (connectTimeout < 1) {
connectTimeout = CONNECT_TIMEOUT;
}
if (readTimeout < 1) {
readTimeout = READ_TIMEOUT;
}
if (paramsMap != null && !paramsMap.isEmpty()) {
StringBuffer str = new StringBuffer();
Set set = paramsMap.keySet();
Iterator iter = set.iterator();
while (iter.hasNext()) {
String key = iter.next().toString();
if (paramsMap.get(key) == null) {
continue;
}
str.append(key).append("=").append(paramsMap.get(key)).append("&");
}
if (str.length() > 0) {
params = str.substring(0, str.length() - 1);
}
}
URL url = new URL(urlAddr);
conn = (HttpURLConnection) url.openConnection();
// 設(shè)置讀取超時(shí)時(shí)間
conn.setReadTimeout(readTimeout);
// 設(shè)置連接超時(shí)時(shí)間
conn.setConnectTimeout(connectTimeout);
// 設(shè)置是否向HttpURLConnection輸出蜈彼,因?yàn)檫@個(gè)是post請(qǐng)求,參數(shù)要放在http正文內(nèi)俺驶,
// 因此需要設(shè)為true, 默認(rèn)情況下是false
conn.setDoOutput(true);
// 不使用緩存,默認(rèn)情況下是true
conn.setUseCaches(false);
// 設(shè)定請(qǐng)求的方法為"POST",默認(rèn)是GET
conn.setRequestMethod("POST");
if (!params.isEmpty()) {
// 此處getOutputStream會(huì)隱含的進(jìn)行connect()
outputStreamWriter = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
// 寫(xiě)入
outputStreamWriter.write(params);
// 刷新該流的緩沖
outputStreamWriter.flush();
}
inputStreamReader = new InputStreamReader(conn.getInputStream(), "utf-8");
bufferedReader = new BufferedReader(inputStreamReader);
while ((line = bufferedReader.readLine()) != null) {
result.append(line);
}
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (inputStreamReader != null) {
try {
inputStreamReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (outputStreamWriter != null) {
try {
outputStreamWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return result.toString();
}
/**
* https get request
*/
public static String getSSL(String urlAddr, Map<String, Object> paramsMap, int connectTimeout, int readTimeout) throws Exception {
log.info("get request url: {}, params: {}", urlAddr, JSONObject.toJSONString(paramsMap));
String line;
String params = "";
HttpsURLConnection conn = null;
BufferedReader bufferedReader = null;
InputStreamReader inputStreamReader = null;
StringBuffer result = new StringBuffer();
TrustManager[] trustManager = {new DefaultX509TrustManager()};
// 創(chuàng)建SSLContext
SSLContext sslContext = SSLContext.getInstance("SSL");
// 初始化
sslContext.init(null, trustManager, new java.security.SecureRandom());
// 獲取SSLSocketFactory對(duì)象
SSLSocketFactory ssf = sslContext.getSocketFactory();
try {
if (connectTimeout < 1) {
connectTimeout = CONNECT_TIMEOUT;
}
if (readTimeout < 1) {
readTimeout = READ_TIMEOUT;
}
if (paramsMap != null && !paramsMap.isEmpty()) {
StringBuffer str = new StringBuffer();
Set set = paramsMap.keySet();
Iterator iter = set.iterator();
while (iter.hasNext()) {
String key = iter.next().toString();
if (paramsMap.get(key) == null) {
continue;
}
str.append(key).append("=").append(paramsMap.get(key)).append("&");
}
if (str.length() > 0) {
params = "?" + str.substring(0, str.length() - 1);
}
}
URL url = new URL(urlAddr + params);
conn = (HttpsURLConnection) url.openConnection();
// 設(shè)置讀取超時(shí)時(shí)間
conn.setReadTimeout(readTimeout);
// 設(shè)置連接超時(shí)時(shí)間
conn.setConnectTimeout(connectTimeout);
// 設(shè)置當(dāng)前實(shí)例使用的SSLSocketFactory
conn.setSSLSocketFactory(ssf);
conn.connect();
inputStreamReader = new InputStreamReader(conn.getInputStream(), "utf-8");
bufferedReader = new BufferedReader(inputStreamReader);
while ((line = bufferedReader.readLine()) != null) {
result.append(line);
}
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (inputStreamReader != null) {
try {
inputStreamReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return result.toString();
}
/**
* https post request
*/
public static String postSSL(String urlAddr, Map<String, Object> paramsMap, int connectTimeout, int readTimeout) throws Exception {
log.info("post request url: {}, params: {}", urlAddr, JSONObject.toJSONString(paramsMap));
String line;
String params = "";
HttpsURLConnection conn = null;
BufferedReader bufferedReader = null;
InputStreamReader inputStreamReader = null;
OutputStreamWriter outputStreamWriter = null;
StringBuffer result = new StringBuffer();
TrustManager[] trustManager = {new DefaultX509TrustManager()};
// 創(chuàng)建SSLContext
SSLContext sslContext = SSLContext.getInstance("SSL");
// 初始化
sslContext.init(null, trustManager, new java.security.SecureRandom());
// 獲取SSLSocketFactory對(duì)象
SSLSocketFactory ssf = sslContext.getSocketFactory();
try {
if (connectTimeout < 1) {
connectTimeout = CONNECT_TIMEOUT;
}
if (readTimeout < 1) {
readTimeout = READ_TIMEOUT;
}
if (paramsMap != null && !paramsMap.isEmpty()) {
StringBuffer str = new StringBuffer();
Set set = paramsMap.keySet();
Iterator iter = set.iterator();
while (iter.hasNext()) {
String key = iter.next().toString();
if (paramsMap.get(key) == null) {
continue;
}
str.append(key).append("=").append(paramsMap.get(key)).append("&");
}
if (str.length() > 0) {
params = str.substring(0, str.length() - 1);
}
}
URL url = new URL(urlAddr);
conn = (HttpsURLConnection) url.openConnection();
// 設(shè)置讀取超時(shí)時(shí)間
conn.setReadTimeout(readTimeout);
// 設(shè)置連接超時(shí)時(shí)間
conn.setConnectTimeout(connectTimeout);
// 設(shè)置當(dāng)前實(shí)例使用的SSLSocketFactory
conn.setSSLSocketFactory(ssf);
// 設(shè)置是否向HttpURLConnection輸出幸逆,因?yàn)檫@個(gè)是post請(qǐng)求,參數(shù)要放在http正文內(nèi)暮现,
// 因此需要設(shè)為true, 默認(rèn)情況下是false
conn.setDoOutput(true);
// 不使用緩存,默認(rèn)情況下是true
conn.setUseCaches(false);
// 設(shè)定請(qǐng)求的方法為"POST",默認(rèn)是GET
conn.setRequestMethod("POST");
if (!params.isEmpty()) {
// 此處getOutputStream會(huì)隱含的進(jìn)行connect()
outputStreamWriter = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
// 寫(xiě)入
outputStreamWriter.write(params);
// 刷新該流的緩沖
outputStreamWriter.flush();
}
inputStreamReader = new InputStreamReader(conn.getInputStream(), "utf-8");
bufferedReader = new BufferedReader(inputStreamReader);
while ((line = bufferedReader.readLine()) != null) {
result.append(line);
}
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (inputStreamReader != null) {
try {
inputStreamReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (outputStreamWriter != null) {
try {
outputStreamWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return result.toString();
}
/**
* http post request
*/
public static String post(String urlAddr, String paramsStr, int connectTimeout, int readTimeout) throws Exception {
log.info("post request url: {}, params: {}", urlAddr, paramsStr);
String line;
HttpURLConnection conn = null;
BufferedReader bufferedReader = null;
InputStreamReader inputStreamReader = null;
OutputStreamWriter outputStreamWriter = null;
StringBuffer result = new StringBuffer();
try {
if (connectTimeout < 1) {
connectTimeout = CONNECT_TIMEOUT;
}
if (readTimeout < 1) {
readTimeout = READ_TIMEOUT;
}
URL url = new URL(urlAddr);
conn = (HttpURLConnection) url.openConnection();
// 設(shè)置讀取超時(shí)時(shí)間
conn.setReadTimeout(readTimeout);
// 設(shè)置連接超時(shí)時(shí)間
conn.setConnectTimeout(connectTimeout);
// 設(shè)置是否向HttpURLConnection輸出还绘,因?yàn)檫@個(gè)是post請(qǐng)求,參數(shù)要放在http正文內(nèi)栖袋,
// 因此需要設(shè)為true, 默認(rèn)情況下是false
conn.setDoOutput(true);
// 不使用緩存,默認(rèn)情況下是true
conn.setUseCaches(false);
// 設(shè)定請(qǐng)求的方法為"POST",默認(rèn)是GET
conn.setRequestMethod("POST");
if (paramsStr != null && !paramsStr.isEmpty()) {
// 此處getOutputStream會(huì)隱含的進(jìn)行connect()
outputStreamWriter = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
// 寫(xiě)入
outputStreamWriter.write(paramsStr);
// 刷新該流的緩沖
outputStreamWriter.flush();
}
inputStreamReader = new InputStreamReader(conn.getInputStream(), "utf-8");
bufferedReader = new BufferedReader(inputStreamReader);
while ((line = bufferedReader.readLine()) != null) {
result.append(line);
}
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (inputStreamReader != null) {
try {
inputStreamReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (outputStreamWriter != null) {
try {
outputStreamWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return result.toString();
}
/**
* https post request
*/
public static String postSSL(String urlAddr, String paramsStr, int connectTimeout, int readTimeout) throws Exception {
log.info("post request url: {}, params: {}", urlAddr, paramsStr);
String line;
HttpsURLConnection conn = null;
BufferedReader bufferedReader = null;
InputStreamReader inputStreamReader = null;
OutputStreamWriter outputStreamWriter = null;
StringBuffer result = new StringBuffer();
TrustManager[] trustManager = {new DefaultX509TrustManager()};
// 創(chuàng)建SSLContext
SSLContext sslContext = SSLContext.getInstance("SSL");
// 初始化
sslContext.init(null, trustManager, new java.security.SecureRandom());
// 獲取SSLSocketFactory對(duì)象
SSLSocketFactory ssf = sslContext.getSocketFactory();
try {
if (connectTimeout < 1) {
connectTimeout = CONNECT_TIMEOUT;
}
if (readTimeout < 1) {
readTimeout = READ_TIMEOUT;
}
URL url = new URL(urlAddr);
conn = (HttpsURLConnection) url.openConnection();
// 設(shè)置讀取超時(shí)時(shí)間
conn.setReadTimeout(readTimeout);
// 設(shè)置連接超時(shí)時(shí)間
conn.setConnectTimeout(connectTimeout);
// 設(shè)置當(dāng)前實(shí)例使用的SSLSocketFactory
conn.setSSLSocketFactory(ssf);
// 設(shè)置是否向HttpURLConnection輸出拍顷,因?yàn)檫@個(gè)是post請(qǐng)求,參數(shù)要放在http正文內(nèi)塘幅,
// 因此需要設(shè)為true, 默認(rèn)情況下是false
conn.setDoOutput(true);
// 不使用緩存,默認(rèn)情況下是true
conn.setUseCaches(false);
// 設(shè)定請(qǐng)求的方法為"POST",默認(rèn)是GET
conn.setRequestMethod("POST");
if (paramsStr != null && !paramsStr.isEmpty()) {
// 此處getOutputStream會(huì)隱含的進(jìn)行connect()
outputStreamWriter = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
// 寫(xiě)入
outputStreamWriter.write(paramsStr);
// 刷新該流的緩沖
outputStreamWriter.flush();
}
inputStreamReader = new InputStreamReader(conn.getInputStream(), "utf-8");
bufferedReader = new BufferedReader(inputStreamReader);
while ((line = bufferedReader.readLine()) != null) {
result.append(line);
}
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (inputStreamReader != null) {
try {
inputStreamReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (outputStreamWriter != null) {
try {
outputStreamWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return result.toString();
}
/**
* ajax response
*/
public static void toJson(JsonResult res, HttpServletResponse response) {
PrintWriter writer = null;
try {
response.setContentType("application/json;charset=utf-8");
writer = response.getWriter();
writer.print(new Gson().toJson(res));
} catch (Exception e) {
log.error("", e);
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/**
* 獲取客戶端ip地址
*/
public static String getClientIp(HttpServletRequest request) {
// 網(wǎng)宿cdn的真實(shí)ip
String ip = request.getHeader("Cdn-Src-Ip");
if (StringUtils.isBlank(ip) || " unknown".equalsIgnoreCase(ip)) {
// 藍(lán)訊cdn的真實(shí)ip
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isBlank(ip) || " unknown".equalsIgnoreCase(ip)) {
// 獲取代理ip
ip = request.getHeader("X-Forwarded-For");
}
if (StringUtils.isBlank(ip) || " unknown".equalsIgnoreCase(ip)) {
// 獲取代理ip
ip = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
// 獲取代理ip
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
// 獲取真實(shí)ip
ip = request.getRemoteAddr();
}
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
}
/**
* 根據(jù)IP獲取地址
*/
public static JSONObject getIpAddress(String ip) {
if (ip == null || ip.trim().length() < 1) {
return null;
}
String code = "0";
String url = "http://ip.taobao.com/service/getIpInfo.php?ip=" + ip;
try {
String res = HttpUtil.get(url, null, 0, 0);
JSONObject json = JSONObject.parseObject(res);
String backCode = json.getString("code");
if (code.equals(backCode)) {
return json.getJSONObject("data");
}
} catch (Exception e) {
log.error("", e);
}
return null;
}
/**
* 設(shè)置下載響應(yīng)
*/
public static void setDownLoadResponse(HttpServletRequest request, HttpServletResponse response, String fileName) throws Exception {
String msie = "msie";
String chrome = "chrome";
String windows = "windows";
String firefox = "firefox";
String browserType = request.getHeader("User-Agent").toLowerCase();
if (browserType.contains(firefox) || browserType.contains(chrome)) {
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
} else if (browserType.contains(msie) || browserType.contains(windows)) {
fileName = URLEncoder.encode(fileName, "UTF-8");
} else {
fileName = new String(fileName.getBytes());
}
// 重置
response.reset();
// 告知瀏覽器不緩存
response.setHeader("pragma", "no-cache");
response.setHeader("cache-control", "no-cache");
response.setHeader("expires", "0");
// 響應(yīng)編碼
response.setCharacterEncoding("UTF-8");
// 用給定的名稱(chēng)和值添加一個(gè)響應(yīng)頭
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
}
/**
* 根據(jù)流獲取字符串
*/
public static String getInputStream(HttpServletRequest request) {
BufferedReader bufferedReader = null;
InputStreamReader inputStreamReader = null;
ServletInputStream servletInputStream = null;
StringBuffer result = new StringBuffer();
try {
String line;
servletInputStream = request.getInputStream();
inputStreamReader = new InputStreamReader(servletInputStream, "utf-8");
bufferedReader = new BufferedReader(inputStreamReader);
while ((line = bufferedReader.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
log.error("", e);
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (inputStreamReader != null) {
try {
inputStreamReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (servletInputStream != null) {
try {
servletInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return result.toString();
}
}