java jdk原生的http请求工具类
1 package com.base;2 import java.io.IOException;
3 import java.io.InputStream;
4 import java.io.InputStreamReader;
5 import java.io.OutputStream;
6 import java.io.Reader;
7 import java.net.HttpURLConnection;
8 import java.net.SocketTimeoutException;
9 import java.net.URL;
10 import java.net.URLEncoder;
11 import java.security.SecureRandom;
12 import java.security.cert.CertificateException;
13 import java.security.cert.X509Certificate;
14 import java.util.Map;
15 import java.util.Set;
16
17 import javax.net.ssl.HostnameVerifier;
18 import javax.net.ssl.HttpsURLConnection;
19 import javax.net.ssl.KeyManager;
20 import javax.net.ssl.SSLContext;
21 import javax.net.ssl.SSLSession;
22 import javax.net.ssl.TrustManager;
23 import javax.net.ssl.X509TrustManager;
24
25 /**
26 *
27 * @ClassName: HttpUtils
28 * @Description:http请求工具类
29 * @author: zhouyy
30 * @date: 2019年10月14日 下午3:50:34
31 *
32 */
33 public class HttpUtils {
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 static HttpUtils getInstance() {
41 if (instance == null) {
42 return new HttpUtils();
43 }
44 return instance;
45 }
46
47
48 public static void main(String[] args) throws SocketTimeoutException, 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 implements X509TrustManager {
54 public X509Certificate[] getAcceptedIssuers() {
55 return null;
56 }
57
58 public void checkClientTrusted(X509Certificate[] chain, String authType)
59 throws CertificateException {
60 }
61
62 public void checkServerTrusted(X509Certificate[] chain, String authType)
63 throws CertificateException {
64 }
65 }
66
67 /**
68 * 以application/json; charset=utf-8方式传输
69 *
70 * @param url
71 * @param requestContent
72 * @return
73 * @throws SocketTimeoutException
74 * @throws IOException
75 */
76 public String postJson(String url, String jsonContent)
77 throws SocketTimeoutException, 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 * @param url
86 * @param requestContent
87 * @return
88 * @throws SocketTimeoutException
89 * @throws IOException
90 */
91 public String postForm(String url) throws SocketTimeoutException,
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 * @param url
100 * @param requestContent
101 * @return
102 * @throws SocketTimeoutException
103 * @throws IOException
104 */
105 public String postForm(String url, Map<String, String> params)
106 throws SocketTimeoutException, 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 * @param url
115 * @param requestContent
116 * @return
117 * @throws SocketTimeoutException
118 * @throws IOException
119 */
120 public String getForm(String url) throws SocketTimeoutException,
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 * @param url
129 * @param requestContent
130 * @return
131 * @throws SocketTimeoutException
132 * @throws IOException
133 */
134 public String getForm(String url, Map<String, String> params)
135 throws SocketTimeoutException, IOException {
136 return doRequest("GET", url, buildQuery(params), 15000, 15000,
137 CTYPE_FORM, null);
138 }
139
140 /**
141 *
142 * <p>@Description: </p>
143 * @Title doRequest
144 * @author zhouyy
145 * @param method 请求的method post/get
146 * @param url 请求url
147 * @param requestContent 请求参数
148 * @param connectTimeout 请求超时
149 * @param readTimeout 响应超时
150 * @param ctype 请求格式 xml/json等等
151 * @param headerMap 请求header中要封装的参数
152 * @return
153 * @throws SocketTimeoutException
154 * @throws IOException
155 * @date: 2019年10月14日 下午3:47:35
156 */
157 private String doRequest(String method, String url, String requestContent,
158 int connectTimeout, int readTimeout, String ctype,
159 Map<String, String> headerMap) throws SocketTimeoutException,
160 IOException {
161 HttpURLConnection conn = null;
162 OutputStream out = null;
163 String rsp = null;
164 try {
165 conn = getConnection(new URL(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 return rsp;
185 }
186
187 private HttpURLConnection getConnection(URL url, String method,
188 String ctype, Map<String, String> headerMap) throws IOException {
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[] { new DefaultTrustManager() },
196 new SecureRandom());
197 } catch (Exception e) {
198 throw new IOException(e);
199 }
200 HttpsURLConnection connHttps = (HttpsURLConnection) url
201 .openConnection();
202 connHttps.setSSLSocketFactory(ctx.getSocketFactory());
203 connHttps.setHostnameVerifier(new HostnameVerifier() {
204 public boolean verify(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.Entry<String, String> entry : headerMap.entrySet()) {
220 conn.setRequestProperty(entry.getKey(), entry.getValue());
221 }
222 }
223 return conn;
224 }
225
226 private String getResponseAsString(HttpURLConnection conn)
227 throws IOException {
228 InputStream es = conn.getErrorStream();
229 if (es == null) {
230 return getStreamAsString(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 return msg;
238 }
239 }
240 }
241
242 private String getStreamAsString(InputStream stream, String charset,
243 HttpURLConnection conn) throws IOException {
244 try {
245 Reader reader = new InputStreamReader(stream, charset);
246
247 StringBuilder response = new StringBuilder();
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 return response.toString();
255 } finally {
256 if (stream != null) {
257 stream.close();
258 }
259 }
260 }
261
262 private String buildQuery(Map<String, String> params) throws IOException {
263 if (params == null || params.isEmpty()) {
264 return "";
265 }
266
267 StringBuilder query = new StringBuilder();
268 Set<Map.Entry<String, String>> entries = params.entrySet();
269 boolean hasParam = false;
270
271 for (Map.Entry<String, String> entry : 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 return query.toString();
283 }
284 }
非原著,借鉴大神!
https://www.cnblogs.com/jpfss/p/10063666.html
以上是 java jdk原生的http请求工具类 的全部内容, 来源链接: utcz.com/z/394608.html