首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Http4s请求获取完整的URL

如何从Http4s请求获取完整的URL
EN

Stack Overflow用户
提问于 2022-06-23 17:32:37
回答 1查看 175关注 0票数 2

我正在尝试获取客户端用于访问Http4s中的URL服务器的URL的开头。例如,给定一个Request[F],我希望获得字符串"http://localhost:8080""https://my-app.company.com",这取决于服务器部署的位置。

在使用Http4s的服务器实现中,当通过以下方式接收请求时

代码语言:javascript
复制
HttpRoutes.of[IO] {
  case req =>
    println(req.uri)
    ???
}

我似乎只得到过一个相对URI,例如//foo/bar -- Uri上的schemeauthority字段都是None

看起来我可以在请求时从localhost:8080头中提取Host部件,但是我没有解决方案的方法(http://https://)。

如何为request.uri.scheme填写正确的值?是否有更合适的方法来获取host

我使用的是http4s 0.22

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-23 20:34:58

当使用Blaze作为HTTP服务器时,您无法获得它。有解决办法。您可以捕获服务器的绑定:

按港口:

代码语言:javascript
复制
[io-compute-4] INFO org.http4s.blaze.channel.nio1.NIO1SocketServerGroup - Service bound to address /[0:0:0:0:0:0:0:0]:8080

按方案分列:

代码语言:javascript
复制
[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遗留实践读取它,但许多遗留软件公司仍在使用这种方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72734363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档