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

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

首先简单描述下,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
最新文章
Java爬取百度云观测对网站的检测数据,获取子域名及域名的安全信息 911
【2020年】百度搜索词获取,获取百度搜索的关键词【真实有效】 1543
Nodejs环境安装,Nodejs环境安装一篇就够了 719
iOS版淘宝打开提示“您使用的程序是内测版本,将于2020-03-28到期,到期将无法使用,请尽快下载最新版本” 1367
关于一位“caoz的梦呓”的大佬在微信公众号喷我的整体回复 61314
DNS TXT记录添加方法,ICP备案信息屏蔽查询处理方案讲解 3662
SEO优化的最佳时间段即将来临,春节最佳SEO优化讲解 2414
SEO实战分析-排名最近突然掉光了问题排查,几个大站关键词下降SEO问题分析 2414
Java模拟WSS websocket ssl请求,Java WSS模拟请求代码示例 5328
Springboot 集成 Ehcache 代码讲解 6781
最热文章
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 392263
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 365181
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 326381
免费天气API,天气JSON API,不限次数获取十五天的天气预报 231292
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 228423
Elasticsearch教程(四) elasticsearch head 插件安装和使用 189213
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 123743
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 110279
Elasticsearch教程(一),全程直播(小白级别) 104358
Elasticsearch教程(五) elasticsearch Mapping的创建 91021

骚码加入我们 / 千人QQ群:259217951

入群需要5元为的是没有垃圾广告,如果没有QQ钱包,可以加群主拉进。

二维码生成 来自 >> 二维码生成器

支付扫码

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

查看我的收藏

正在加载... ...