Java模拟WSS websocket ssl请求,Java WSS模拟请求代码示例

JSON 2019-12-27 15:01:01 21504

首先简单描述下,ws和wss的区别,  websocket   是 ws,然后带证书(  SSL  )的  websocket  请求就是wss。就好比是   http   和   https   的区别。就是带证书请求,wss相对ws来说更为安全一些。

网上检索  Java  模拟 WSS 出来的结果较少,另外不太全面,故整理一下。

Maven 导入wss websocket jar包

<dependency>
    <groupId>org.java-websocket</groupId>
    <artifactId>Java-WebSocket</artifactId>
    <version>1.4.0</version>
</dependency>

如果您  Maven  导入失败,请使用阿里云的镜像库:

<mirrors>
    <mirror>
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    </mirror>
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    <mirror>
        <id>central</id>
        <name>Maven Repository Switchboard</name>
        <url>http://repo1.maven.org/maven2/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>

</mirrors>

WSS Websocket 客户端

主要是要忽略证书操作,只要对方不是强校验证书就没问题。

import java.net.URI;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.*;


import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft;

/**
 * 构建 SSLWebSocket客户端,忽略证书
 */
public abstract class SSLWebSocketClient extends WebSocketClient {

    //构造方法
    public SSLWebSocketClient(URI serverURI,String message) {
        super(serverURI);
        if(serverURI.toString().contains("wss://")){
            trustAllHosts(this);
            this.send(message);
        }
    }

    public SSLWebSocketClient(URI serverURI,Draft draft) {
        super(serverURI,draft);
        if(serverURI.toString().contains("wss://"))
            trustAllHosts(this);
    }
    /**
     * 忽略证书
     * @param client
     */
    static void trustAllHosts(SSLWebSocketClient client) {
        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return new java.security.cert.X509Certificate[]{};
            }

            @Override
            public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
            }
        }};

        try {
            SSLContext ssl = SSLContext.getInstance("TLS");
            ssl.init(null, trustAllCerts, new java.security.SecureRandom());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


WSS Websocket 调用

然后直接调用即可。

import java.net.URI;
import java.net.URISyntaxException;

import org.java_websocket.handshake.ServerHandshake;

public class WssTest {



    public static void main(String[] args) throws URISyntaxException {
       new SSLWebSocketClient(new URI("wss://wssdemo.sojson.com/test"),"初始化消息") {

            @Override
            public void onClose(int arg0, String arg1, boolean arg2) {
                System.out.println("onClose");
            }

            @Override
            public void onError(Exception arg0) {
                System.out.println("onError");

            }

            @Override
            public void onMessage(String arg0) {
                System.out.println("onMessage");
                System.out.println(arg0);
                this.send(arg0);
            }

            @Override
            public void onOpen(ServerHandshake arg0) {
                System.out.println("onOpen");
                this.send("发送消息");
            }}.connect();
    }

}

我特意多加了一个参数,您可以在 new 这个wss客户端的时候就可以传入初始化消息,这个时候您可以发送初始化成功后的第一条消息。

有的人会问那怎么通信,也就是这是调用其他的wss,然后和自己怎么通信,您可以初始化 SSLWebSocketClient 的时候就把您的对象带进去,不管是实例化一个对象还是这个对象提供了静态方法,都可以再 onmessage里去调用。

这里要是是  JavaScript  就很好操作了,直接传callback方法进去即可,但是思想还是可以用上的,传对象,调用对象里的方法。

代码来自:https://blog.csdn.net/viogs/article/details/88723262 的整理。

如果是直接请求  websocket  ?如何?

其实本身就是支持的,或者直接把 SSLWebSocketClient 中的wss判断直接去掉即可,不去掉也不影响,因为是判断如果是wss 忽略证书操作。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/353.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
Java 实现在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具
HTTP模拟请求有几种方法
HTTP模拟请求有几种方法
在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具【更新说明】
Http Get 请求Java 请求工具类封装
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决
Springboot HTTP Get/Post 请求讲解,Springboot几行代码完成Http请求
Java 之 HTTP请求乱码解决,GZIP 返回值乱码解决
多说迁移,Java开发仿自主实现评论(一)
Java获取浏览器请求头(User-Agent),分析浏览器信息,系统信息的几种办法。
最新文章
文件上传漏洞与防御 4058
前端构建工具选型指南:Webpack、Vite、Rollup、esbuild 深度对比 1444
物联网时代2026年时序数据库选型指南 1151
SaaS行业面临AI挑战:从“无限复用”到“灵活适应” 1269
神经网络:从构造到模型训练全链路解析 1168
一文吃透 Redis 核心存储结构:ziplist、listpack 与哈希表扩容 / 并发查询 1593
Linux sudo提权完整指南:从基础用法到生产级安全配置 691
XSS 和 CSRF 的本质区别及开发防御全解析 772
JVM垃圾回收(GC)全维度解析:从原理到调优实战 813
Linux动静态库与ELF加载全解析:从实操制作到底层原理 912
最热文章
免费天气API,天气JSON API,不限次数获取十五天的天气预报 783114
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 711464
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 679993
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 562673
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 512621
Elasticsearch教程(四) elasticsearch head 插件安装和使用 484794
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 302947
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 247433
Elasticsearch教程(一),全程直播(小白级别) 233097
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 228329
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...