如何通过Ktor客户端拦截器为请求添加请求头?
Ktor客户端拦截器添加请求头的正确实现
你的代码问题在于Ktor的HttpRequest是不可变对象,无法直接修改原请求的头信息,需要基于原请求创建新的请求实例来添加所需头。
修改后的代码如下:
install(HttpSend) { intercept { call, _ -> val originalRequest = call.request // 检查请求是否不存在No-Authentication头 if (originalRequest.headers["No-Authentication"] == null) { val token = prefs.getString("UserToken", null) ?: "" // 构建新请求,添加目标头(示例用Authorization,可根据需求修改头名和格式) val newRequest = originalRequest.copy( headers = originalRequest.headers.append("Authorization", "Bearer $token") ) // 传递新请求继续执行 proceed(call.copy(request = newRequest)) } else { // 存在指定头,直接放行原请求 call } } }
关键说明:
- 利用
request.copy()创建新请求对象,避免修改不可变的原请求 - 通过
headers.append()添加新头,支持自定义头名称和内容格式 - 调用
proceed()方法传递修改后的请求,确保新请求被正常发送
内容的提问来源于stack exchange,提问作者Adel Ayman
相关产品推荐
相关产品推荐

