我遇到与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?也许我只是错过了明显的......
对可能滥用条款的道歉,但我希望你能得到一般的想法。
非常感谢任何帮助,谢谢!
答案 0 :(得分:2)
所以我实际上设法解决了它,结果发现它不是实际问题的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();
}
}
希望这有助于将来可能遇到此问题的任何人。