[英]Why does OkHttp silently replace ws:// or wss:// schemes?
我一直試圖在Android上使用帶有wss://
URL的OkHttp WebSockets
無濟於事。 當我使用wss://
scheme傳遞一個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)
}
}
OkHttp用於建模URL的HttpUrl類僅模擬http:
和https:
方案。 但這可能不是您的Web套接字失敗的原因。 方案更改旨在作為OkHttp內部的實現細節,不應影響行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.