我有与 Websockets and cookies in Android 相同的问题,我一直在尝试按照第一条评论的建议解决它,
WebSocketClient( URI serverUri , Draft protocolDraft , Map httpHeaders , int connectTimeout)
使用 Java-WebSocket ,以及查看许多其他 API,例如 Jetty 和 AndroidAsync 。但尽管如此,我还是无法打开 websocket 连接。
我有一个Apache http cookie ,并需要使用 WebSocket 向服务器验证我自己的身份。将 cookie 转换为 httpHeader 的正确方法是什么,或者有什么巧妙的方法可以在连接到 websocket 时简单地将整个 cookie 添加到身份验证中?也许我只是错过了显而易见的事情..
对于可能的术语误用,我们深表歉意,但我希望您能了解总体思路。
任何帮助将不胜感激,谢谢!
最佳答案
所以我实际上设法解决了这个问题,结果发现实际问题不是 cookie,而是 websocket 没有使用有效的 sslcontext 进行初始化。这个问题很容易解决:
WebSocketOrderClient webSocketOrderClient = new WebSocketOrderClient(uri, new Draft_17(), cmap, TIMEOUT);
SSLContext sslContext = null;
sslContext = SSLContext.getInstance( "TLS" );
sslContext.init( null, null, null ); // will use java's default key and trust store which is sufficient unless you deal with self-signed certificates
webSocketOrderClient.setWebSocketFactory(new DefaultSSLWebSocketClientFactory(sslContext));
webSocketOrderClient.connectBlocking();
使用 WebSocketOrderClient:
private class WebSocketOrderClient extends WebSocketClient {
public WebSocketOrderClient( URI serverUri, Draft draft, Map<String, String> headers, int timeout) {
super( serverUri, draft, headers, timeout );
}
@Override
public void onOpen( ServerHandshake handshakedata ) {
Log.w("connected", "true");
}
@Override
public void onMessage( String message ) {
Log.w( "got: ", message );
}
@Override
public void onClose( int code, String reason, boolean remote ) {
Log.w( "Disconnected", ""+code );
}
@Override
public void onError( Exception ex ) {
ex.printStackTrace();
}
}
希望这对将来可能遇到此问题的任何人有所帮助。
关于java - 使用身份验证 cookie 打开 WebSocket 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27166258/