java 使用 websocket 的包, 连接 wss 的 websocket 失败?-灵析社区

北北che

使用 jar 包 , 连接 websocket, 用域名的方式连接失败, 中间有通过 nginx 转发 org.java-websocket Java-WebSocket 1.5.3 **用浏览器的控制台 new Websocket(wss://域名) 已经成功** nginx 配置正常的 , 用于 websocket 的配置添加了 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1; 使用 ws://域名 方式报 400 错误 用 wss://域名 方式 nginx 连请求都没收到 域名是买的, 是能通过验证的 使用 http 直接连接服务的方式是成功的 java 代码 ClientWs clientWs = new ClientWs(url); clientWs.connect(); while (!clientWs.getReadyState().equals(ReadyState.OPEN)) { try { Thread.sleep(1000); } catch (InterruptedException e) { } System.out.println("Connecting..."); if (clientWs.getReadyState() == ReadyState.CLOSED){ System.out.println("连接失败"); System.exit(-1); } } System.out.println("Connected."); public class ClientWs extends WebSocketClient { public ClientWs(URI serverUri) { super(serverUri); trustAllHosts(this); } public ClientWs(URI serverUri, Map httpHeaders) { super(serverUri, httpHeaders); trustAllHosts(this); } @Override public void onOpen(ServerHandshake serverHandshake) { } @Override public void onMessage(String s) { } @Override public void onClose(int i, String s, boolean b) { } @Override public void onError(Exception e) { } static void trustAllHosts(ClientWs clientWs){ TrustManager[] trustAllCerts =new TrustManager[]{new X509TrustManager(){ @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[]{}; } }}; try { SSLContext ssl = SSLContext.getInstance("TLS"); ssl.init(null, trustAllCerts,new java.security.SecureRandom()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } } }

阅读量:181

点赞量:0

问AI
你应该使用js来进行连接Websocket,或者使用工具,比如 "http://www.jsons.cn/websocket/" 或者新版的postman是能支持Websocket,浏览器直接访问ws是不行的