我正在尝试获取客户端用于访问Http4s中的URL服务器的URL的开头。例如,给定一个Request[F],我希望获得字符串"http://localhost:8080"或"https://my-app.company.com",这取决于服务器部署的位置。
在使用Http4s的服务器实现中,当通过以下方式接收请求时
HttpRoutes.of[IO] {
case req =>
println(req.uri)
???
}我似乎只得到过一个相对URI,例如/或/foo/bar -- Uri上的scheme和authority字段都是None。
看起来我可以在请求时从localhost:8080头中提取Host部件,但是我没有解决方案的方法(http://或https://)。
如何为request.uri.scheme填写正确的值?是否有更合适的方法来获取host
我使用的是http4s 0.22
发布于 2022-06-23 20:34:58
当使用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,并在其上进行模式匹配。
一个糟糕的解决方法是将其添加为header,并通过标头 it遗留实践读取它,但许多遗留软件公司仍在使用这种方法。
https://stackoverflow.com/questions/72734363
复制相似问题