java jdk原生的http请求工具类

java

  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

回到顶部