gpt4 book ai didi

java - 使用身份验证 cookie 打开 WebSocket 连接

转载 作者:行者123 更新时间:2023-12-02 09:14:09 30 4
gpt4 key购买 nike

我有与 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com