我正在嘗試獲取客戶端用于訪問 Http4s 中的網路服務器的 URL 的開頭。即給定一個Request[F]我想獲取字串"http://localhost:8080"或"https://my-app.company.com"取決于服務器的部署位置。
在使用 Http4s 的服務器實作中,當通過類似的方式接收請求時
HttpRoutes.of[IO] {
case req =>
println(req.uri)
???
}
我似乎只得到一個相對的 URI,例如/or /foo/bar- the schemeandauthority上的欄位Uriare both None。
看起來我可以localhost:8080從請求的標頭中提取部分Host,但我沒有解決方案(http://或https://)的解決方案。
如何填寫正確的值request.uri.scheme?有沒有更合適的方法來獲得host?
FWIW 我正在使用 http4s 0.22
uj5u.com熱心網友回復:
使用 Blaze 作為 HTTP 服務器時無法獲取它。有解決方法。您可以捕獲服務器的系結:
按港口:
[io-compute-4] INFO org.http4s.blaze.channel.nio1.NIO1SocketServerGroup - Service bound to address /[0:0:0:0:0:0:0:0]:8080
按架構:
[io-compute-4] INFO org.http4s.blaze.server.BlazeServerBuilder - http4s v1.0.0-M33 on blaze v1.0.0-M33 started at http://[::]:8080/
或者您可以將 8080 映射到 HTTP 并將 8081 映射到 HTTPS 并在其上進行模式匹配。
一個不好的解決方法是將其添加為 HTTP 標頭并通過Headers It 遺留實踐讀取它,但許多遺留軟體公司仍在使用這種方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/495431.html
