我尝试使用OkHttp3
连接到一个安全的websocket服务器。当使用wss://echo.websocket.org时,一切正常,没有问题,但是连接到正在进行中的项目的生产服务器时,我无法正确连接。在30-40秒后,WebSocketListener中的onClosing
被调用。
我怀疑这与wss
中的SSL/TLS加密有关。是否有办法让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());
}});
}