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

soゝso 2019-12-27 15:01:01 6872

首先简单描述下,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 GET/POST模拟请求测试工具【更新说明】
Http Get 请求Java 请求工具类封装
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决
多说迁移,Java开发仿自主实现评论(一)
Java 之 HTTP请求乱码解决,GZIP 返回值乱码解决
Java获取浏览器请求头(User-Agent),分析浏览器信息,系统信息的几种办法。
由于多说关闭,多说源码不开放,Java仿多说评论系统实现(二)
MyEclipse8.5 注册码生成 Java代码实现方式。永久免费
Springboot HTTP请求,Springboot HTTP 请求 Demo。Get/Post
最新文章
当我谈 HTTP 时,我谈些什么? 844
新浪短链(t.cn)最新申请官方API的方法讲解。 5196
QUIC / HTTP3 协议详细分析讲解 1492
恭喜那个做云存储的七牛云完成 F 轮 10 亿人民币的融资,开启新的云旅程 2257
Autojs怎么安全加密?Autojs在线加密工具注意事项。 3736
Java JSON 组件选型之 FastJson 为什么总有漏洞? 11767
使用七牛云存储实现图片API,自动删除图片方案合集 3000
神速ICP备案经验分享,ICP备案居然一天就通过了 4206
百度加强推送URL链接,百度SEO强行推送链接JavaScript代码案例讲解。 4319
SOJSON 拓展服务器被DDos攻击了一晚上,是如何解决的? 5505
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 477060
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 437273
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 373920
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 369729
免费天气API,天气JSON API,不限次数获取十五天的天气预报 334938
Elasticsearch教程(四) elasticsearch head 插件安装和使用 245561
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 213651
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 151039
Elasticsearch教程(一),全程直播(小白级别) 129968
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 112207
支付扫码

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

查看我的收藏

正在加载... ...