目录

  • https客户端
  • 指定ssl算法套

浏览器可以作为客户端向服务器发送Http请求,当需要访问后台或第三方Restful接口时,也可以用java实现客户端直接发get/post请求,获取数据。

https客户端


import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;/*** 基于HttpsURLConnection实现客户端https请求**/
public class HttpsClientDemo {private static final String METHOD_GET = "GET";private static final String METHOD_POST = "POST";/*** doGet*/private static void httpsGet(String url) throws NoSuchAlgorithmException, KeyManagementException, IOException {// 创建连接对象HttpsURLConnection connection = getHttpsURLConnection(url, METHOD_GET);connection.connect();System.out.println("cipersuit used:" + connection.getCipherSuite());// 读取连接响应内容getresponse(connection);}/*** doPost*/private static void httpsPost(String url, String params) throws NoSuchAlgorithmException, IOException, KeyManagementException {// 创建连接对象HttpsURLConnection connection = getHttpsURLConnection(url, METHOD_POST);// 发送POST请求必须设置如下两行connection.setDoOutput(true);connection.setDoInput(true);connection.connect();// 获取URLConnection对象对应的输出流PrintWriter out = null;try {out = new PrintWriter(connection.getOutputStream());// 发送请求参数out.print(params);out.flush();} finally {if (out != null) {out.close();}}getresponse(connection);}/*** 读取连接响应内容*/private static void getresponse(HttpsURLConnection connection) throws IOException {BufferedReader br = null;try {br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));String inputLine;StringBuilder sb = new StringBuilder();while ((inputLine = br.readLine()) != null) {sb.append(inputLine);}System.out.println(sb.toString());System.out.println("responseMsg:" + connection.getResponseMessage() + "; responseCode:" + connection.getResponseCode());} finally {if (br != null) {br.close();}}}/*** 获取连接对象*/private static HttpsURLConnection getHttpsURLConnection(String url, String method) throws IOException, NoSuchAlgorithmException, KeyManagementException {URL myUrl = new URL(url);// 创建连接对象HttpsURLConnection connection = (HttpsURLConnection) myUrl.openConnection();connection.setRequestMethod(method);// 设置SSLSocketFactory对象(若不指定算法套,getSslContext().getSocketFactory()即可)connection.setSSLSocketFactory(new MySSLSocketFactory());// 验证hostname,全部允许connection.setHostnameVerifier((hostname, sslSession) -> true);// 设置通用请求属性connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36");connection.setRequestProperty("Connection", "Keep-Alive");connection.setRequestProperty("Charset", "UTF-8");return connection;}public static void main(String[] args) throws Exception {String url = "https://***";httpsGet(url);
//        httpsPost(url, "username=admin&password=admin@1234&forceLogin=false");}
}

指定ssl算法套

如果是需要设置客户端算法套,可以通过继承SSLSocketFactory重写其createSocket()方法,自行设置SSL算法套。

import javax.net.ssl.*;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;/*** 重写createSocket方法,设置算法套*/
public class MySSLSocketFactory extends SSLSocketFactory {private static final String[] cipherSuites = new String[]{"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384","TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"};private static SSLContext sslContext = null;// 设置算法套private void setSSLParams(SSLSocket sslSocket) {sslSocket.setUseClientMode(true);sslSocket.setEnabledCipherSuites(cipherSuites);}/*** 创建SSLContext对象,使用默认信任管理器初始化*/private static SSLContext getSslContext() {if (sslContext == null) {try {sslContext = SSLContext.getInstance("TLSv1.2");sslContext.init(new KeyManager[0], new TrustManager[]{new DefaultTrustManager()}, new SecureRandom());} catch (NoSuchAlgorithmException | KeyManagementException e) {e.printStackTrace();}SSLContext.setDefault(sslContext);}return sslContext;}@Overridepublic String[] getDefaultCipherSuites() {return cipherSuites;}@Overridepublic String[] getSupportedCipherSuites() {return cipherSuites;}@Overridepublic Socket createSocket(Socket socket, String host, int port, boolean b) throws IOException {SSLSocket sslSocket = (SSLSocket) getSslContext().getSocketFactory().createSocket(socket, host, port, b);setSSLParams(sslSocket);return sslSocket;}@Overridepublic Socket createSocket(String host, int port) throws IOException {SSLSocket sslSocket = (SSLSocket) getSslContext().getSocketFactory().createSocket(host, port);setSSLParams(sslSocket);return sslSocket;}@Overridepublic Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException {SSLSocket sslSocket = (SSLSocket) getSslContext().getSocketFactory().createSocket(host, port, localHost, localPort);setSSLParams(sslSocket);return sslSocket;}@Overridepublic Socket createSocket(InetAddress host, int port) throws IOException {SSLSocket sslSocket = (SSLSocket) getSslContext().getSocketFactory().createSocket(host, port);setSSLParams(sslSocket);return sslSocket;}@Overridepublic Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {SSLSocket sslSocket = (SSLSocket) getSslContext().getSocketFactory().createSocket(address, port, localAddress, localPort);setSSLParams(sslSocket);return sslSocket;}/*** SSL信任管理类*/private static class DefaultTrustManager implements X509TrustManager {@Overridepublic void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return null;}}}

转载于:https://www.cnblogs.com/eaglediao/p/9465537.html

HTTPS客户端的java实现相关推荐

  1. memcached客户端_Memcached Java客户端示例

    memcached客户端 Today we will look into Memcached Java client example. Earlier we learned about telnet ...

  2. 阿里api网关接口客户端demo,java实现源码,其他语言可参考

    访问阿里api网关接口客户端demo,java实现源码,其他语言可参考 上一篇文章 <阿里api网关接口创建.发布.授权.调试> 中,介绍了3个典型接口的创建并在阿里控制台调试完成,地址: ...

  3. Android客户端和Java服务器端集成支付宝

    移动端集成支付,似乎是每个App都可能面临的一件事.所有项目都在谈盈利模式,而从C端获取现金流是盈利中最重要的一个途径之一. 当前大家主要采用微信支付和阿里支付集成到自己的移动应用,虽然官方提供一些文 ...

  4. Centos7 ceph集群安装 cephfs客户端挂载 java代码调用

    Centos7 ceph集群安装 cephfs客户端挂载 java代码调用 ceph简介(http://docs.ceph.org.cn/ 官方文档) ceph分为ceph monitor,ceph ...

  5. Nginx配置HTTPS客户端认证

    Nginx配置HTTPS客户端认证 最近折腾自己个人网站,有一个私人模块,只能自己访问,使用登录授权方式虽然也能达到目的,但每次都要登录,且密码也不一定安全.想起学HTTPS的时,有一个客户端证书的概 ...

  6. Netty服务器部署在Android设备上,接收来自PC客户端的Java Socket客户端发送的JSON数据

    Netty服务器部署在Android设备上,接收来自PC客户端的Java Socket客户端发送的数据 一个简单的模型,在Android手机上部署一个Netty写的服务器,绑定端口9000,等待客户端 ...

  7. Libcurl的编译_HTTP/HTTPS客户端源码示例

    HTTP/HTTPS客户端源码示例 环境:  zlib-1.2.8  openssl-1.0.1g  curl-7.36 Author:  Kagula LastUpdateDate: 2016-05 ...

  8. RTSP客户端的JAVA实现

    http://www.thinksaas.cn/group/topic/175675/ 参考资料              1. <RTSP简单命令>:http://blog.csdn.n ...

  9. Android客户端与Java tomcat之间HTTPS通讯

    文中涉及到https认证和post传参. 不使用SSL(Secure Sockets Layer)/TLS的HTTP通信就是不加密的通信,所有信息都已明文传播,容易被窃取.篡改或冒充.SSL/TLS协 ...

最新文章

  1. jq--ajax中止请求
  2. 人生不能过分认真(较真),但必须认真!
  3. go build命令参数详解
  4. leetcode 229. Majority Element II(多数投票算法)
  5. 显示消息提示对话框(WebForm)
  6. pages文件服务器地址,Pages怎么设置目录 Pages如何设置目录
  7. html中的瀑布流是什么
  8. 多数据源与动态数据源的权衡
  9. thymleaf th:if标签
  10. 提防最近一些公司的小九九!
  11. [struts2]继承ActionSupport类
  12. 单调队列java_单调队列单调栈
  13. 几百块的投影仪靠谱吗?性能怎么样?
  14. 新息自适应卡尔曼滤波matlab代码,基于自适应卡尔曼滤波的弱信号跟踪方法与流程...
  15. linux ubuntu 16.04 flash插件安装
  16. 十二时辰手把手教你入门Spring
  17. 一点、两点、三点透视投影的python3实现-计算机图形学
  18. AngularJS 精妙绝伦的控制器
  19. html实现气流动态图,新风系统的动态图,简单易懂
  20. mysql gis 高德_Shp文件在高德地图展示

热门文章

  1. java实现qq空间模块_Java实现模拟QQ空间图片上传
  2. c++ 未定义标识符string_Redis之String的数据结构
  3. 高频面试题解析:给你任意指定生活中的一件物品,你会怎么测试?【考考你的思维】
  4. java弹出提示框jo类_Java JobMeta.getJobLogTable方法代码示例
  5. tidb 企业_TiDB,日均千万级数据存储方案选型
  6. lombok slfj 中_lombok @Slf4j注解
  7. 防止html网页被f12抓取,JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码...
  8. 河北农业大学计算机科学分数线,河北农业大学现代科技学院计算机科学与技术专业2016年在河北理科高考录取最低分数线...
  9. 根号x_【深情攻X自卑受】糖与盐by根号三
  10. python绘制子图去掉x轴坐标值_python – 关闭图形的所有子图的轴