将安全 websockets (wss) 与 OkHttp 结合使用

use*_*049 5 ssl android websocket okhttp okhttp3

我曾尝试OkHttp3用于连接到安全的 websocket 服务器。使用 wss://echo.websocket.org 时它工作正常,没问题,但是当连接到正在进行的项目的生产服务器时,我无法正确连接到它。30-40 秒后onClosing调用WebSocketListener.

我怀疑这与 SSL/TLS 加密有关 wss. 有没有办法让 OkHttpClient 接受新证书?

这是我现在用来与 OkHttp3 建立 websocket 连接的代码。

WebSocket webSocket;
OkHttpClient client;

OkHttpClient.Builder builder = new OkHttpClient.Builder();
client = builder.build();
Request request = new Request.Builder()
        .url(MainActivity.WS_URL)
        .header("Auth-Token","secret-api-token-here")
        .build();
Log.i("WebSockets", "Headers: " + request.headers().toString());
webSocket = client.newWebSocket(request, new WebSocketListener() {

    private static final int NORMAL_CLOSURE_STATUS = 1000;
    @Override
    public void onOpen(WebSocket webSocket, Response response) {
        webSocket.send("{Auth-Token:secret-api-token-here}");
        Log.i("WebSockets", "Connection accepted!");
        //webSocket.close(NORMAL_CLOSURE_STATUS, "Goodbye !");
    }
    @Override
    public void onMessage(WebSocket webSocket, String text) {
        Log.i("WebSockets", "Receiving : " + text);
    }
    @Override
    public void onMessage(WebSocket webSocket, ByteString bytes) {
        Log.i("WebSockets", "Receiving bytes : " + bytes.hex());
    }
    @Override
    public void onClosing(WebSocket webSocket, int code, String reason) {
        webSocket.close(NORMAL_CLOSURE_STATUS, null);
        Log.i("WebSockets", "Closing : " + code + " / " + reason);
    }
    @Override
    public void onFailure(WebSocket webSocket, Throwable t, Response response) {
        Log.i("WebSockets", "Error : " + t.getMessage());
    }});
}
Run Code Online (Sandbox Code Playgroud)

小智 1

我使用OkHttp3websocket 通过加密连接与服务器连接wss,我遇到了同样的问题。后来发现服务器在一段时间后关闭了连接。