package com.javaweb.third.baidu.baiduSite; import lombok.extern.slf4j.Slf4j; import org.springframework.util.CollectionUtils; import javax.net.ssl.HttpsURLConnection; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.Map; import java.util.Set; /** * Http接口请求工具 * */ @Slf4j public class RestClientUtil { protected static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.10 Safari/537.36"; private static final String DEFAULT_ENCODE = "UTF-8"; public static String post(String urlString, Map params, Map requestHeader) { return request("POST", urlString, params, DEFAULT_ENCODE, requestHeader); } public static String get(String urlString) { return get(urlString, DEFAULT_ENCODE, null); } public static String get(String urlString, Map requestHeader) { return get(urlString, DEFAULT_ENCODE, requestHeader); } public static String get(String urlString, String encode) { return get(urlString, encode, null); } public static String get(String urlString, String encode, Map requestHeader) { return request("GET", urlString, null, encode, requestHeader); } /** * @param method: * GET/PUT/POST default GET * @param urlString: * requried * @param params: * default null */ public static String request(String method, String urlString, Map params, String encode, Map requestHeader) { // 解决因jdk版本问题造成的SSL请求失败的问题 System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2"); final HttpURLConnection connection; try { connection = openConnection(urlString); connection.setRequestMethod(method); if (null != requestHeader) { Set> entrySet = requestHeader.entrySet(); for (Map.Entry entry : entrySet) { connection.setRequestProperty(entry.getKey(), entry.getValue()); } } else { connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); connection.setRequestProperty("Accept-Charset", "utf-8"); connection.setRequestProperty("User-Agent", USER_AGENT); } connection.setDoOutput(true); if (!CollectionUtils.isEmpty(params)) { final OutputStream outputStream = connection.getOutputStream(); StringBuilder paramsStr = new StringBuilder(); Set> set = params.entrySet(); for (Map.Entry stringObjectEntry : set) { paramsStr.append(stringObjectEntry.getKey()).append("=").append(stringObjectEntry.getValue()).append("&"); } paramsStr.setLength(paramsStr.length() - 1); writeOutput(outputStream, paramsStr.toString()); outputStream.close(); } // log.info("RestClientUtil url: {}, response: {} : {}", urlString, connection.getResponseCode(), connection.getResponseMessage()); if (connection.getResponseCode() == HttpsURLConnection.HTTP_OK) { return readInput(connection.getInputStream(), encode); } else { return readInput(connection.getErrorStream(), encode); } } catch (Exception e) { // log.error("Http请求失败{}", urlString, e); } return null; } protected static HttpURLConnection openConnection(final String urlString) throws Exception { final URL url = new URL(urlString); return (HttpURLConnection) url.openConnection(); } protected static void writeOutput(final OutputStream outputStream, final String params) throws Exception { ByteArrayInputStream inputStram = new ByteArrayInputStream(params.getBytes("UTF-8")); final byte[] buffer = new byte[1024]; int length = 0; while ((length = inputStram.read(buffer)) != -1) { outputStream.write(buffer, 0, length); } } protected static String readInput(final InputStream is, String encode) { if (null == is) { return null; } StringBuilder content = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(is, encode));) { String line = ""; while ((line = reader.readLine()) != null) { content.append(line); } } catch (Exception e) { // log.error("数据读取失败", e); } return content.toString(); } }