Piasy
12/30/2024, 12:06 PMPiasy
01/02/2025, 1:42 PMval ws = client.webSocketSession(url, block)
val respHeaders = ws?.call?.response?.headers?.toMap()
but it doesn't work, also logging content doesn't show any response header:
REQUEST: <ws://localhost:3000/engine.io/?EIO=4&transport=websocket|ws://localhost:3000/engine.io/?EIO=4&transport=websocket>
METHOD: HttpMethod(value=GET)
COMMON HEADERS
-> Accept: */*
-> Accept-Charset: UTF-8
-> X-EngineIO: foo
CONTENT HEADERS
-> Connection: Upgrade
-> Sec-WebSocket-Key: YjdhZTdjZGY5YTU4NTgxYQ==
-> Sec-WebSocket-Version: 13
-> Upgrade: websocket
BODY Content-Type: null
BODY START
BODY END
RESPONSE: 101 Switching Protocols
METHOD: HttpMethod(value=GET)
FROM: <ws://localhost:3000/engine.io/?EIO=4&transport=websocket|ws://localhost:3000/engine.io/?EIO=4&transport=websocket>
COMMON HEADERS
BODY Content-Type: null
BODY START
BODY END
When I connect to the same server with OkHttp, logging content has reponse headers:
--> GET <http://localhost:3000/engine.io/?EIO=4&transport=websocket|http://localhost:3000/engine.io/?EIO=4&transport=websocket>
X-EngineIO: foo
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: UV+coRrb16k2qEi6sZmHkg==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate
--> END GET
<-- 101 Switching Protocols <http://localhost:3000/engine.io/?EIO=4&transport=websocket|http://localhost:3000/engine.io/?EIO=4&transport=websocket> (40ms)
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: F1Sn+7cE5k/hytlQpaMjYHSgfAQ=
X-EngineIO: hi
X-EngineIO: foo
<-- END HTTP
Aleksei Tirman [JB]
01/02/2025, 1:51 PMclient.webSocket("<wss://ws.postman-echo.com/raw>") {
val response = call.response
response.headers.forEach { key, values -> println("$key: $values")}
}
Piasy
01/02/2025, 1:53 PMAleksei Tirman [JB]
01/02/2025, 1:54 PMDate: [Thu, 02 Jan 2025 13:50:27 GMT]
Connection: [upgrade]
Server: [nginx]
Upgrade: [websocket]
Sec-WebSocket-Accept: [XT3tzZpG0F8BagPlHIrV1pr6AhI=]
Piasy
01/02/2025, 1:56 PMAleksei Tirman [JB]
01/02/2025, 1:56 PMPiasy
01/02/2025, 1:56 PMPiasy
01/02/2025, 2:18 PMpublic suspend fun HttpClient.webSocket(
urlString: String,
request: HttpRequestBuilder.() -> Unit = {},
block: suspend DefaultClientWebSocketSession.() -> Unit
)
Piasy
01/02/2025, 2:28 PMval httpClient = httpClient {
install(Logging) {
logger = object : io.ktor.client.plugins.logging.Logger {
override fun log(message: String) {
println(message)
}
}
level = LogLevel.ALL
}
install(WebSockets) {
pingIntervalMillis = 20_000
}
}
val scope = CoroutineScope(Dispatchers.Default)
scope.launch {
httpClient.webSocket("<wss://ws.postman-echo.com/raw>") {
println("XXPXX block start")
val response = call.response
println("XXPXX block got response")
response.headers.forEach { key, values -> println("$key: $values")}
println("XXPXX block end")
}
}
and output is:
REQUEST: <wss://ws.postman-echo.com/raw>
METHOD: HttpMethod(value=GET)
COMMON HEADERS
-> Accept: */*
-> Accept-Charset: UTF-8
CONTENT HEADERS
-> Connection: Upgrade
-> Sec-WebSocket-Key: ZTM0YmJlNDZhNDRiMmExYQ==
-> Sec-WebSocket-Version: 13
-> Upgrade: websocket
BODY Content-Type: null
BODY START
BODY END
RESPONSE: 101 Switching Protocols
METHOD: HttpMethod(value=GET)
FROM: <wss://ws.postman-echo.com/raw>
COMMON HEADERS
BODY Content-Type: null
BODY START
BODY END
XXPXX block start
XXPXX block got response
XXPXX block end
Aleksei Tirman [JB]
01/02/2025, 2:29 PMPiasy
01/02/2025, 2:32 PMAleksei Tirman [JB]
01/02/2025, 2:32 PMPiasy
01/02/2025, 2:32 PMPiasy
01/02/2025, 2:40 PMREQUEST: <wss://ws.postman-echo.com/raw>
METHOD: HttpMethod(value=GET)
COMMON HEADERS
-> Accept: */*
-> Accept-Charset: UTF-8
CONTENT HEADERS
-> Connection: Upgrade
-> Sec-WebSocket-Key: NWFjOTgyZTY2M2I5MjEyMg==
-> Sec-WebSocket-Version: 13
-> Upgrade: websocket
BODY Content-Type: null
BODY START
BODY END
RESPONSE: 101 Switching Protocols
METHOD: HttpMethod(value=GET)
FROM: <wss://ws.postman-echo.com/raw>
COMMON HEADERS
-> connection: upgrade
-> date: Thu, 02 Jan 2025 14:40:20 GMT
-> sec-websocket-accept: ZbNvfGNHXt1pYISCF3Ci2l2kH6U=
-> server: nginx
-> upgrade: websocket
BODY Content-Type: null
BODY START
BODY END
XXPXX block start
XXPXX block got response
connection: [upgrade]
date: [Thu, 02 Jan 2025 14:40:20 GMT]
sec-websocket-accept: [ZbNvfGNHXt1pYISCF3Ci2l2kH6U=]
server: [nginx]
upgrade: [websocket]
XXPXX block end
Piasy
01/02/2025, 2:54 PMAleksei Tirman [JB]
01/02/2025, 2:57 PMPiasy
01/04/2025, 12:38 AMAleksei Tirman [JB]
01/08/2025, 10:20 AM