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

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

首先简单描述下,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获取浏览器请求头(User-Agent),分析浏览器信息,系统信息的几种办法。
Springboot HTTP Get/Post 请求讲解,Springboot几行代码完成Http请求
多说迁移,Java开发仿自主实现评论(一)
Java 之 HTTP请求乱码解决,GZIP 返回值乱码解决
由于多说关闭,多说源码不开放,Java仿多说评论系统实现(二)
MyEclipse8.5 注册码生成 Java代码实现方式。永久免费
最新文章
PHP变量剖析 4
SQL全外连接剖析 119
SQL自然连接剖析 147
springboot启动原理 245
SQL右连接【RIGHT JOIN】详解及图解 450
SQL左链接【LEFT JOIN】详解及图解 357
SQL非等值连接剖析 262
SQL等链接剖析 291
SQL内连接详解及图解 385
python之numpy常用的100种数值相关方法及代码示例 231
最热文章
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 679222
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 674561
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 599008
免费天气API,天气JSON API,不限次数获取十五天的天气预报 565182
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 551699
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 509186
Elasticsearch教程(四) elasticsearch head 插件安装和使用 479635
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 262798
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 244092
Elasticsearch教程(一),全程直播(小白级别) 225115
支付扫码

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

查看我的收藏

正在加载... ...