OkHttp Websockets - 连接到 websocket 时添加一个主体

Posted

技术标签:

【中文标题】OkHttp Websockets - 连接到 websocket 时添加一个主体【英文标题】:OkHttp Websockets - Add a body when connecting to websocket 【发布时间】:2020-02-11 08:01:14 【问题描述】:

我正在使用 okHttp websocket 库,并且成功连接到我的 websocket 服务器,但目前我只能在连接时获取连接 ID。我想在正文中发送一些额外的信息,但我不知道如何使用 okHttp 添加它

Request request = new Request.Builder()
                .url("wss://mywebsocketurl.com")
                .build();

我试过了

RequestBody requestBody = new FormBody.Builder()
.add("camera_id", "e9502c54-927c-4639-a94f-8d03149c9c62")
.build();


Request request = new Request.Builder()
                .url("wss://mywebsocketurl.com")
                .method("POST", requestBody)
                .build();


Request request = new Request.Builder()
                .url("wss://mywebsocketurl.com")
                .post(requestBody)
                .build();

但它总是返回

java.lang.IllegalArgumentException: method GET must not have a request body.

【问题讨论】:

【参考方案1】:

我知道现在回答为时已晚。 无论如何,该网址应该只是 GET。所以我建立了连接并在 onOpen 回调函数上发送了正文。它奏效了。

private fun initializeSocket(url: String) 
    val request: Request = Request.Builder().url(url).build()
    val listener = WebSocketListener()
    webSocket = client!!.newWebSocket(request, listener)
    client?.dispatcher()?.executorService()?.shutdown()


private class WebSocketListener : WebSocketListener() 
    override fun onOpen(webSocket: WebSocket, response: Response?) 
        val content = "\n" +
                "  \"messageType\": \"INIT_CONNECTION\"\n" +
                ""
        webSocket.send(content)
    
    ...

【讨论】:

以上是关于OkHttp Websockets - 连接到 websocket 时添加一个主体的主要内容,如果未能解决你的问题,请参考以下文章

Qt 连接到 WebSockets 服务器

OKHttp Android没有通过http2 alpn连接到nginx

连接到 websockets NodeJS Express 服务器时出错

如何配置 mqtt.js 通过 websockets 连接到 iot.eclipse.org

Qt5 WebSockets 测试应用程序未连接到测试服务

我可以在不使用 websockets 的情况下使用本机 mqtt 连接到我的 mqtt 代理吗?