将自定义标头设置为 websocket 请求 (ktor)
Posted
技术标签:
【中文标题】将自定义标头设置为 websocket 请求 (ktor)【英文标题】:Set custom headers to websocket request (ktor) 【发布时间】:2019-08-21 19:36:56 【问题描述】:我正在从客户端建立一个 websocket 连接,如下所示:
val client = HttpClient(CIO).config
install(WebSockets)
client.webSocket(
method = HttpMethod.Get,
host = "127.0.0.1",
port = 8080,
path = "/api")
// Send and receive messages
我想做的是向这个请求添加 http 标头。
Ktor 有一个相当长的文档,但尽管如此,我还是无法找到如何做到这一点。
【问题讨论】:
【参考方案1】:终于找到答案了:
client.webSocket(
method = HttpMethod.Get,
host = "127.0.0.1",
port = 8080,
path = "/api",
request =
header("my_header", "my_header_value")
)
// more
如何找到这个?来自webSocket
的签名:
suspend fun HttpClient.webSocket(
method: HttpMethod = HttpMethod.Get,
host: String = "localhost",
port: Int = DEFAULT_PORT,
path: String = "/",
request: HttpRequestBuilder.() -> Unit = ,
block: suspend DefaultClientWebSocketSession.() -> Unit
): Unit
这里的HttpRequestBuilder
听起来像是可以自定义请求的东西(确实有一些文档)。
签名意味着request
应该是一个作用域闭包,其中this
将是HttpRequestBuilder
。
然后这个闭包可以设置标题或更改其他内容。例如,HttpRequestBuilder.header
。
【讨论】:
以上是关于将自定义标头设置为 websocket 请求 (ktor)的主要内容,如果未能解决你的问题,请参考以下文章
C# 将自定义标头设置为 httpclient 会导致错误,因为标头名称被误用
如何将自定义 HTTP 标头注入 SuperAgent 发出的每个请求?
如何将自定义 HTTP 请求标头添加到 Thymeleaf 生成的表单或链接?