二、java发送https的各类请求
导航
java开发中需要调用其他服务的对外提供的https请求,上一篇写的是调用http,处理方式不太一样,可以参考如下代码:
注:调用的主类比较简单就不写了。
pom.xml
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.10</version> </dependency> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency>
HttpsUtil.class类
package cn.cas.xjipc.yjsapplication.unit; import org.apache.commons.httpclient.util.HttpURLConnection; import org.springframework.stereotype.Component; import java.io.*; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.*; @Component public class HttpsUtil { private static class TrustAnyTrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; } } private static class TrustAnyHostnameVerifier implements HostnameVerifier { public boolean verify(String hostname, SSLSession session) { return true; } } /** * post方式请求服务器(https协议) * * @param url 请求地址 * @param content 参数 * @param charset 编码 * @return * @throws NoSuchAlgorithmException * @throws KeyManagementException * @throws IOException */ public String post(String url, String content, String charset) throws NoSuchAlgorithmException, KeyManagementException, IOException { String result = ""; SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom()); URL console = new URL(url); HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(); conn.setRequestProperty("Content-Type", "application/json; charset=utf-8"); conn.setSSLSocketFactory(sc.getSocketFactory()); conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); conn.setDoOutput(true); conn.connect(); DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.write(content.getBytes(charset)); // 刷新、关闭 out.flush(); out.close(); InputStream is = conn.getInputStream(); if (is != null) { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { outStream.write(buffer, 0, len); } is.close(); byte[] array = outStream.toByteArray(); result = new String(array, "utf-8"); return result; } return null; } /** * put方式请求服务器(https协议) * * @param url 请求地址 * @param content 参数 * @param token 编码 * @return * @throws NoSuchAlgorithmException * @throws KeyManagementException * @throws IOException */ public String put(String url, String content, String token) throws NoSuchAlgorithmException, KeyManagementException, IOException { String result = ""; SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom()); URL console = new URL(url); HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(); conn.setRequestMethod("PUT"); conn.setSSLSocketFactory(sc.getSocketFactory()); conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/json; charset=utf-8"); //conn.setRequestProperty("Authorization", "xxxxx" + token); conn.connect(); DataOutputStream out = new DataOutputStream(conn.getOutputStream()); //out.write(content.getBytes("UTF8")); // 刷新、关闭 out.flush(); out.close(); InputStream is = conn.getInputStream(); if (is != null) { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { outStream.write(buffer, 0, len); } is.close(); byte[] array = outStream.toByteArray(); result = new String(array, "utf-8"); return result; } return null; } /** * get方式请求服务器(https协议) * * @param url 请求地址 * @param content 参数 * @param token 编码 * @return * @throws NoSuchAlgorithmException * @throws KeyManagementException * @throws IOException */ public String get(String url, String content, String token) throws NoSuchAlgorithmException, KeyManagementException, IOException { String result = ""; SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom()); URL httpUrl = new URL(url); HttpsURLConnection conn = (HttpsURLConnection) httpUrl.openConnection(); conn.setRequestMethod("GET"); conn.setSSLSocketFactory(sc.getSocketFactory()); conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/json; charset=utf-8"); //conn.setRequestProperty("Authorization", "xxxxxx" + token); conn.connect();
//get方法与post方法除了conn.setRequestMethod("GET")这句不一样外,关于DataOutputStream out的几行一定要删除,否则就会报405的错误 InputStream is = conn.getInputStream(); if (is != null) { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { outStream.write(buffer, 0, len); } is.close(); byte[] array = outStream.toByteArray(); result = new String(array, "utf-8"); return result; } return null; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)