java自带的请求_java jdk原生的http请求工具类

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 *@return

153 *@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 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值