1 packagecom.base;2 importjava.io.IOException;3 importjava.io.InputStream;4 importjava.io.InputStreamReader;5 importjava.io.OutputStream;6 importjava.io.Reader;7 importjava.net.HttpURLConnection;8 importjava.net.SocketTimeoutException;9 importjava.net.URL;10 importjava.net.URLEncoder;11 importjava.security.SecureRandom;12 importjava.security.cert.CertificateException;13 importjava.security.cert.X509Certificate;14 importjava.util.Map;15 importjava.util.Set;16
17 importjavax.net.ssl.HostnameVerifier;18 importjavax.net.ssl.HttpsURLConnection;19 importjavax.net.ssl.KeyManager;20 importjavax.net.ssl.SSLContext;21 importjavax.net.ssl.SSLSession;22 importjavax.net.ssl.TrustManager;23 importjavax.net.ssl.X509TrustManager;24
25 /**
26 *27 * @ClassName: HttpUtils28 * @Description:http请求工具类29 *@author: zhouyy30 * @date: 2019年10月14日 下午3:50:3431 *32 */
33 public classHttpUtils {34 private static final String CTYPE_FORM = "application/x-www-form-urlencoded;charset=utf-8";35 private static final String CTYPE_JSON = "application/json; charset=utf-8";36 private static final String charset = "utf-8";37
38 private static HttpUtils instance = null;39
40 public staticHttpUtils getInstance() {41 if (instance == null) {42 return newHttpUtils();43 }44 returninstance;45 }46
47
48 public static void main(String[] args) throwsSocketTimeoutException, IOException {49 String resp = getInstance().postJson("http://localhost:8080/test/test", "{\"custCmonId\":\"12345678\",\"custNo\":\"111\",\"custNo111\":\"706923\"}");50 System.out.println(resp);51 }52
53 private class DefaultTrustManager implementsX509TrustManager {54 publicX509Certificate[] getAcceptedIssuers() {55 return null;56 }57
58 public voidcheckClientTrusted(X509Certificate[] chain, String authType)59 throwsCertificateException {60 }61
62 public voidcheckServerTrusted(X509Certificate[] chain, String authType)63 throwsCertificateException {64 }65 }66
67 /**
68 * 以application/json; charset=utf-8方式传输69 *70 *@paramurl71 *@paramrequestContent72 *@return
73 *@throwsSocketTimeoutException74 *@throwsIOException75 */
76 publicString postJson(String url, String jsonContent)77 throwsSocketTimeoutException, IOException {78 return doRequest("POST", url, jsonContent, 15000, 15000, CTYPE_JSON,79 null);80 }81
82 /**
83 * POST 以application/x-www-form-urlencoded;charset=utf-8方式传输84 *85 *@paramurl86 *@paramrequestContent87 *@return
88 *@throwsSocketTimeoutException89 *@throwsIOException90 */
91 public String postForm(String url) throwsSocketTimeoutException,92 IOException {93 return doRequest("POST", url, "", 15000, 15000, CTYPE_FORM, null);94 }95
96 /**
97 * POST 以application/x-www-form-urlencoded;charset=utf-8方式传输98 *99 *@paramurl100 *@paramrequestContent101 *@return
102 *@throwsSocketTimeoutException103 *@throwsIOException104 */
105 public String postForm(String url, Mapparams)106 throwsSocketTimeoutException, IOException {107 return doRequest("POST", url, buildQuery(params), 15000, 15000,108 CTYPE_FORM, null);109 }110
111 /**
112 * POST 以application/x-www-form-urlencoded;charset=utf-8方式传输113 *114 *@paramurl115 *@paramrequestContent116 *@return
117 *@throwsSocketTimeoutException118 *@throwsIOException119 */
120 public String getForm(String url) throwsSocketTimeoutException,121 IOException {122 return doRequest("GET", url, "", 15000, 15000, CTYPE_FORM, null);123 }124
125 /**
126 * POST 以application/x-www-form-urlencoded;charset=utf-8方式传输127 *128 *@paramurl129 *@paramrequestContent130 *@return
131 *@throwsSocketTimeoutException132 *@throwsIOException133 */
134 public String getForm(String url, Mapparams)135 throwsSocketTimeoutException, IOException {136 return doRequest("GET", url, buildQuery(params), 15000, 15000,137 CTYPE_FORM, null);138 }139
140 /**
141 *142 *
@Description:
143 * @Title doRequest144 *@authorzhouyy145 *@parammethod 请求的method post/get146 *@paramurl 请求url147 *@paramrequestContent 请求参数148 *@paramconnectTimeout 请求超时149 *@paramreadTimeout 响应超时150 *@paramctype 请求格式 xml/json等等151 *@paramheaderMap 请求header中要封装的参数152 *@return153 *@throwsSocketTimeoutException154 *@throwsIOException155 * @date: 2019年10月14日 下午3:47:35156 */
157 privateString doRequest(String method, String url, String requestContent,158 int connectTimeout, intreadTimeout, String ctype,159 Map headerMap) throwsSocketTimeoutException,160 IOException {161 HttpURLConnection conn = null;162 OutputStream out = null;163 String rsp = null;164 try{165 conn = getConnection(newURL(url), method, ctype, headerMap);166 conn.setConnectTimeout(connectTimeout);167 conn.setReadTimeout(readTimeout);168
169 if(requestContent != null && requestContent.trim().length() >0){170 out =conn.getOutputStream();171 out.write(requestContent.getBytes(charset));172 }173
174 rsp =getResponseAsString(conn);175 } finally{176 if (out != null) {177 out.close();178 }179 if (conn != null) {180 conn.disconnect();181 }182 conn = null;183 }184 returnrsp;185 }186
187 privateHttpURLConnection getConnection(URL url, String method,188 String ctype, Map headerMap) throwsIOException {189 HttpURLConnection conn;190 if ("https".equals(url.getProtocol())) {191 SSLContext ctx;192 try{193 ctx = SSLContext.getInstance("TLS");194 ctx.init(new KeyManager[0],195 new TrustManager[] { newDefaultTrustManager() },196 newSecureRandom());197 } catch(Exception e) {198 throw newIOException(e);199 }200 HttpsURLConnection connHttps =(HttpsURLConnection) url201 .openConnection();202 connHttps.setSSLSocketFactory(ctx.getSocketFactory());203 connHttps.setHostnameVerifier(newHostnameVerifier() {204 public booleanverify(String hostname, SSLSession session) {205 return true;206 }207 });208 conn =connHttps;209 } else{210 conn =(HttpURLConnection) url.openConnection();211 }212 conn.setRequestMethod(method);213 conn.setDoInput(true);214 conn.setDoOutput(true);215 conn.setRequestProperty("Accept",216 "text/xml,text/javascript,text/html,application/json");217 conn.setRequestProperty("Content-Type", ctype);218 if (headerMap != null) {219 for (Map.Entryentry : headerMap.entrySet()) {220 conn.setRequestProperty(entry.getKey(), entry.getValue());221 }222 }223 returnconn;224 }225
226 privateString getResponseAsString(HttpURLConnection conn)227 throwsIOException {228 InputStream es =conn.getErrorStream();229 if (es == null) {230 returngetStreamAsString(conn.getInputStream(), charset, conn);231 } else{232 String msg =getStreamAsString(es, charset, conn);233 if (msg != null && msg.trim().length() >0) {234 throw new IOException(conn.getResponseCode() + ":"
235 +conn.getResponseMessage());236 } else{237 returnmsg;238 }239 }240 }241
242 privateString getStreamAsString(InputStream stream, String charset,243 HttpURLConnection conn) throwsIOException {244 try{245 Reader reader = newInputStreamReader(stream, charset);246
247 StringBuilder response = newStringBuilder();248 final char[] buff = new char[1024];249 int read = 0;250 while ((read = reader.read(buff)) > 0) {251 response.append(buff, 0, read);252 }253
254 returnresponse.toString();255 } finally{256 if (stream != null) {257 stream.close();258 }259 }260 }261
262 private String buildQuery(Map params) throwsIOException {263 if (params == null ||params.isEmpty()) {264 return "";265 }266
267 StringBuilder query = newStringBuilder();268 Set> entries =params.entrySet();269 boolean hasParam = false;270
271 for (Map.Entryentry : entries) {272 String name =entry.getKey();273 String value =entry.getValue();274 if(hasParam) {275 query.append("&");276 } else{277 hasParam = true;278 }279 query.append(name).append("=")280 .append(URLEncoder.encode(value, charset));281 }282 returnquery.toString();283 }284 }