我与Android中的Websockets和cookie有相同的问题,我一直在尝试按照第一条评论的建议解决它,
WebSocketClient( URI serverUri , Draft protocolDraft , Map httpHeaders , int connectTimeout)
使用Java-WebSocket,以及查看许多其他API,如Jetty和AndroidAsync。但尽管如此,我无法打开 websocket 连接。
我有一个Apache http cookie,需要它来使用WebSocket向服务器进行身份验证。将 cookie 转换为 httpHead 的正确方法是什么,或者是否有任何巧妙的方法可以在连接到 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();
}
}
希望这对将来可能遇到此问题的任何人有所帮助。