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. public static void main(String[] args) throws SocketTimeoutException, IOException {
  48. String resp = getInstance().postJson("http://localhost:8080/test/test", "{\"custCmonId\":\"12345678\",\"custNo\":\"111\",\"custNo111\":\"706923\"}");
  49. System.out.println(resp);
  50. }
  51.  
  52. private class DefaultTrustManager implements X509TrustManager {
  53. public X509Certificate[] getAcceptedIssuers() {
  54. return null;
  55. }
  56.  
  57. public void checkClientTrusted(X509Certificate[] chain, String authType)
  58. throws CertificateException {
  59. }
  60.  
  61. public void checkServerTrusted(X509Certificate[] chain, String authType)
  62. throws CertificateException {
  63. }
  64. }
  65.  
  66. /**
  67. * 以application/json; charset=utf-8方式传输
  68. *
  69. * @param url
  70. * @param requestContent
  71. * @return
  72. * @throws SocketTimeoutException
  73. * @throws IOException
  74. */
  75. public String postJson(String url, String jsonContent)
  76. throws SocketTimeoutException, IOException {
  77. return doRequest("POST", url, jsonContent, 15000, 15000, CTYPE_JSON,
  78. null);
  79. }
  80.  
  81. /**
  82. * POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
  83. *
  84. * @param url
  85. * @param requestContent
  86. * @return
  87. * @throws SocketTimeoutException
  88. * @throws IOException
  89. */
  90. public String postForm(String url) throws SocketTimeoutException,
  91. IOException {
  92. return doRequest("POST", url, "", 15000, 15000, CTYPE_FORM, null);
  93. }
  94.  
  95. /**
  96. * POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
  97. *
  98. * @param url
  99. * @param requestContent
  100. * @return
  101. * @throws SocketTimeoutException
  102. * @throws IOException
  103. */
  104. public String postForm(String url, Map<String, String> params)
  105. throws SocketTimeoutException, IOException {
  106. return doRequest("POST", url, buildQuery(params), 15000, 15000,
  107. CTYPE_FORM, null);
  108. }
  109.  
  110. /**
  111. * POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
  112. *
  113. * @param url
  114. * @param requestContent
  115. * @return
  116. * @throws SocketTimeoutException
  117. * @throws IOException
  118. */
  119. public String getForm(String url) throws SocketTimeoutException,
  120. IOException {
  121. return doRequest("GET", url, "", 15000, 15000, CTYPE_FORM, null);
  122. }
  123.  
  124. /**
  125. * POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
  126. *
  127. * @param url
  128. * @param requestContent
  129. * @return
  130. * @throws SocketTimeoutException
  131. * @throws IOException
  132. */
  133. public String getForm(String url, Map<String, String> params)
  134. throws SocketTimeoutException, IOException {
  135. return doRequest("GET", url, buildQuery(params), 15000, 15000,
  136. CTYPE_FORM, null);
  137. }
  138.  
  139. /**
  140. *
  141. * <p>@Description: </p>
  142. * @Title doRequest
  143. * @author zhouyy
  144. * @param method 请求的method post/get
  145. * @param url 请求url
  146. * @param requestContent 请求参数
  147. * @param connectTimeout 请求超时
  148. * @param readTimeout 响应超时
  149. * @param ctype 请求格式 xml/json等等
  150. * @param headerMap 请求header中要封装的参数
  151. * @return
  152. * @throws SocketTimeoutException
  153. * @throws IOException
  154. * @date: 2019年10月14日 下午3:47:35
  155. */
  156. private String doRequest(String method, String url, String requestContent,
  157. int connectTimeout, int readTimeout, String ctype,
  158. Map<String, String> headerMap) throws SocketTimeoutException,
  159. IOException {
  160. HttpURLConnection conn = null;
  161. OutputStream out = null;
  162. String rsp = null;
  163. try {
  164. conn = getConnection(new URL(url), method, ctype, headerMap);
  165. conn.setConnectTimeout(connectTimeout);
  166. conn.setReadTimeout(readTimeout);
  167.  
  168. if(requestContent != null && requestContent.trim().length() >0){
  169. out = conn.getOutputStream();
  170. out.write(requestContent.getBytes(charset));
  171. }
  172.  
  173. rsp = getResponseAsString(conn);
  174. } finally {
  175. if (out != null) {
  176. out.close();
  177. }
  178. if (conn != null) {
  179. conn.disconnect();
  180. }
  181. conn = null;
  182. }
  183. return rsp;
  184. }
  185.  
  186. private HttpURLConnection getConnection(URL url, String method,
  187. String ctype, Map<String, String> headerMap) throws IOException {
  188. HttpURLConnection conn;
  189. if ("https".equals(url.getProtocol())) {
  190. SSLContext ctx;
  191. try {
  192. ctx = SSLContext.getInstance("TLS");
  193. ctx.init(new KeyManager[0],
  194. new TrustManager[] { new DefaultTrustManager() },
  195. new SecureRandom());
  196. } catch (Exception e) {
  197. throw new IOException(e);
  198. }
  199. HttpsURLConnection connHttps = (HttpsURLConnection) url
  200. .openConnection();
  201. connHttps.setSSLSocketFactory(ctx.getSocketFactory());
  202. connHttps.setHostnameVerifier(new HostnameVerifier() {
  203. public boolean verify(String hostname, SSLSession session) {
  204. return true;
  205. }
  206. });
  207. conn = connHttps;
  208. } else {
  209. conn = (HttpURLConnection) url.openConnection();
  210. }
  211. conn.setRequestMethod(method);
  212. conn.setDoInput(true);
  213. conn.setDoOutput(true);
  214. conn.setRequestProperty("Accept",
  215. "text/xml,text/javascript,text/html,application/json");
  216. conn.setRequestProperty("Content-Type", ctype);
  217. if (headerMap != null) {
  218. for (Map.Entry<String, String> entry : headerMap.entrySet()) {
  219. conn.setRequestProperty(entry.getKey(), entry.getValue());
  220. }
  221. }
  222. return conn;
  223. }
  224.  
  225. private String getResponseAsString(HttpURLConnection conn)
  226. throws IOException {
  227. InputStream es = conn.getErrorStream();
  228. if (es == null) {
  229. return getStreamAsString(conn.getInputStream(), charset, conn);
  230. } else {
  231. String msg = getStreamAsString(es, charset, conn);
  232. if (msg != null && msg.trim().length() >0) {
  233. throw new IOException(conn.getResponseCode() + ":"
  234. + conn.getResponseMessage());
  235. } else {
  236. return msg;
  237. }
  238. }
  239. }
  240.  
  241. private String getStreamAsString(InputStream stream, String charset,
  242. HttpURLConnection conn) throws IOException {
  243. try {
  244. Reader reader = new InputStreamReader(stream, charset);
  245.  
  246. StringBuilder response = new StringBuilder();
  247. final char[] buff = new char[1024];
  248. int read = 0;
  249. while ((read = reader.read(buff)) > 0) {
  250. response.append(buff, 0, read);
  251. }
  252.  
  253. return response.toString();
  254. } finally {
  255. if (stream != null) {
  256. stream.close();
  257. }
  258. }
  259. }
  260.  
  261. private String buildQuery(Map<String, String> params) throws IOException {
  262. if (params == null || params.isEmpty()) {
  263. return "";
  264. }
  265.  
  266. StringBuilder query = new StringBuilder();
  267. Set<Map.Entry<String, String>> entries = params.entrySet();
  268. boolean hasParam = false;
  269.  
  270. for (Map.Entry<String, String> entry : entries) {
  271. String name = entry.getKey();
  272. String value = entry.getValue();
  273. if (hasParam) {
  274. query.append("&");
  275. } else {
  276. hasParam = true;
  277. }
  278. query.append(name).append("=")
  279. .append(URLEncoder.encode(value, charset));
  280. }
  281. return query.toString();
  282. }
  283. }

非原著,借鉴大神!

https://www.cnblogs.com/jpfss/p/10063666.html

java jdk原生的http请求工具类的更多相关文章

  1. Http请求工具类(Java原生Form+Json)

    package com.tzx.cc.common.constant.util; import java.io.IOException; import java.io.InputStream; imp ...

  2. java模板模式项目中使用--封装一个http请求工具类

    需要调用http接口的代码继承FundHttpTemplate类,重写getParamData方法,在getParamDate里写调用逻辑. 模板: package com.crb.ocms.fund ...

  3. 微信https请求工具类

    工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...

  4. Http、Https请求工具类

    最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...

  5. 远程Get,Post请求工具类

    1.远程请求工具类   import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...

  6. Java判断不为空的工具类总结

    1.Java判断是否为空的工具类,可以直接使用.包含,String字符串,数组,集合等等. package com.bie.util; import java.util.Collection; imp ...

  7. 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类

    下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确,也不需要验证服务器证书中的域名是否有效. (PS:建议下 ...

  8. Http请求工具类 httputil

    package com.snowfigure.kits.net; import java.io.BufferedReader; import java.io.IOException; import j ...

  9. HttpClientUtils:Http请求工具类

    HttpClientUtils:Http请求工具类 Scala:HttpClientUtils Scala:HttpClientUtils import java.io.IOException imp ...

随机推荐

  1. PostgreSQL通过解析日志,获取数据库增量变化,pg_recvlogical

    1.首先用该工具来看我们的日志变化,需要先将test_decoding插件编译并安装(进入contrib,编译安装即可) 创建一个slot: SELECT * FROM pg_create_logic ...

  2. CAS导致的ABA问题及解决:时间戳原子引用AtomicReference、AtomicStampedReference

    1.CAS导致ABA问题: CAS算法实现一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并交换,那么在这个时间差中会导致数据的变化. 比如:线程1从内存位置V中取出A,这时线程2也从V中取出A ...

  3. springboot笔记-thymeleaf

    简介:Thymeleaf 是⾯向 Web 和独⽴环境的现代服务器端 Java 模板引擎,能够处理 HTML.XML.JavaScript.CSS 甚至纯文本.Thymeleaf 的作用域在 HTML ...

  4. python——元组方法及字符串方法

    元组方法 Tup.count():计算元组中指定元素出现的次数 Tup.count('c') Tup.index():在元组中从左到右查找指定元素,找到第一个就返回该元素的索引值 Tup.index( ...

  5. 配置ShiroFilter需要注意的问题(Shiro_DelegatingFilterProxy)

    ShiroFilter的工作原理 ShiroFilter:DelegatingFilterProxy作用是自动到Spring 容器查找名字为shiroFilter(filter-name)的bean并 ...

  6. 2019-11-29-msbuild-项目文件常用判断条件

    title author date CreateTime categories msbuild 项目文件常用判断条件 lindexi 2019-11-29 08:36:48 +0800 2019-7- ...

  7. laravel 学习之第二章

    Controller Controller之Request 获取请求的值 namespace App\Http\Controllers; use Illuminate\http\Request; pu ...

  8. Git 查看远端仓库地址

    git remote -v

  9. 004-SaltStack入门篇之数据系统Grains、Pillar

    1.什么是Grains? Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息.可以理解为Grains记录着每台Minion的一些常用属性,比如CPU ...

  10. 021-Zabbix4.2对IIS监控摸索记录

    Zabbix是很强大,但是相关的细节技术文档貌似很少,摸索之路就显得异常难. 度娘搜了下,关于Zabbix对IIS的监控资料确实有,确实也讲如何操作了,但是细细按照对方的要求操作下,总是缺数据,no ...