为什么OkHttp会悄悄替换ws://或wss://协议?

5
我一直在尝试在Android上使用OkHttp WebSockets处理wss:// URL却无功而返。当我传递一个带有wss://协议的URL时,它会被替换为https://。然后,它肯定会失败。
有没有人能够提供如何继续进行的建议?是否还有更好的WebSocket库可用?这是我正在使用的服务。
class WebsocketService(private val okHttpClient: OkHttpClient) : 
WebSocketListener() {

private lateinit var webSocket: WebSocket
private lateinit var serverListener: ServerListener

fun connect(listener: ServerListener) {
    this.serverListener = listener


    val request = Request.Builder().url(SOCKET_URL).build()

    okHttpClient.newWebSocket(request, this)
}

override fun onOpen(webSocket: WebSocket?, response: Response?) {
    super.onOpen(webSocket, response)
    Timber.e("On Open %s", response.toString())
}

override fun onFailure(webSocket: WebSocket?, t: Throwable?, response: Response?) {
    super.onFailure(webSocket, t, response)
    Timber.e("On Failure %s", response.toString())
}

override fun onClosing(webSocket: WebSocket?, code: Int, reason: String?) {
    super.onClosing(webSocket, code, reason)
    Timber.e("On Closing %s", reason)
}

override fun onMessage(webSocket: WebSocket?, text: String?) {
    super.onMessage(webSocket, text)
    Timber.e("On Message %s", text)
}

override fun onMessage(webSocket: WebSocket?, bytes: ByteString?) {
    super.onMessage(webSocket, bytes)
    Timber.e("On Message Bytes %s", bytes)
}

override fun onClosed(webSocket: WebSocket?, code: Int, reason: String?) {
    super.onClosed(webSocket, code, reason)
    Timber.e("On Closed %s", reason)
}


enum class ConnectionStatus {
    DISCONNECTED,
    CONNECTED
}

interface ServerListener {
    fun onNewMessage(message: String)
    fun onStatusChange(status: ConnectionStatus)
}
}
1个回答

0
OkHttp使用的HttpUrl类只对“http:”和“https:”模式进行建模。但这很可能不是您的Web套接字失败的原因。方案更改旨在作为OkHttp内部实现细节,不应影响行为。

1
谢谢!有时候只是得到一些肯定,知道自己不是疯了,就很有帮助。 - androidDeving
原来是一个Action Cable问题。 - androidDeving
愿意详细解释修复的问题吗?别让我们悬而未决。 - Bassinator
1
@androidDeving,您能告诉我们问题出在哪里吗?我目前也遇到了同样的问题(使用actioncable),非常感谢您的帮助。 - efemoney
2
如果服务器对https和wss请求的响应不同怎么办?我正在连接到一个服务器,其中任何https流量都会被重定向,就像它是一个普通的HTML网页请求一样,因此保留方案至关重要。 - Rupert Rawnsley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接