Grzegorz Gajewski
01/15/2024, 9:35 PMinstall("Rewrite-bad-response-headers") {
receivePipeline.intercept(HttpReceivePipeline.State) { response ->
proceedWith(
object : HttpResponse() {
override val call: HttpClientCall = response.call
override val status: HttpStatusCode get() = response.status
override val version: HttpProtocolVersion = response.version
override val requestTime: GMTDate = response.requestTime
override val responseTime: GMTDate = response.responseTime
override val content: ByteReadChannel = response.content
override val headers = response.headers.fixed()
override val coroutineContext: CoroutineContext = response.coroutineContext
}
)
}
}
it works fine until I install logger (order doesn’t matter):
install(Logging) {
logger = object : Logger {
override fun log(message: String) {
SomeLogger.v(message)
}
}
level = LogLevel.HEADERS
}
then my headers are gone and replaced with original request.
Any ideas what might be wrong?Aleksei Tirman [JB]
01/17/2024, 12:02 PMLogging
plugin or returned by the HttpResponse.headers
method?Grzegorz Gajewski
01/17/2024, 4:12 PMscope.plugin(HttpSend).intercept { context ->
val origin = execute(context)
if (origin.response.status != HttpStatusCode.Unauthorized) return@intercept origin
if (origin.request.attributes.contains(AuthCircuitBreaker)) return@intercept origin
Grzegorz Gajewski
01/17/2024, 4:13 PMAleksei Tirman [JB]
01/18/2024, 9:05 AMHttpReceivePipeline.After
phase. To solve the problem, add and intercept the phase after HttpReceivePipeline.After
phase:
val client = HttpClient(OkHttp) {
install(Logging) {
level = LogLevel.BODY
}
}
val phase = PipelinePhase("after after")
client.receivePipeline.insertPhaseAfter(HttpReceivePipeline.After, phase)
client.receivePipeline.intercept(phase) { response ->
proceedWith(
object : HttpResponse() {
override val call: HttpClientCall = response.call
override val status: HttpStatusCode get() = response.status
override val version: HttpProtocolVersion = response.version
override val requestTime: GMTDate = response.requestTime
override val responseTime: GMTDate = response.responseTime
override val content: ByteReadChannel = response.content
override val headers = headersOf("custom" to listOf("123"))
override val coroutineContext: CoroutineContext = response.coroutineContext
}
)
}