在 java 中,我想用新的 Host
替换 url 的 Host
部分,其中主机和 url 都作为字符串提供。
这应该考虑主机可以有一个端口的事实,如defined in the RFC
例如,给定以下输入
- 网址:http://localhost/me/out?it=5
- 主机:我的服务器:20000
我应该从正确执行此操作的函数中获得以下输出
有谁知道在 url 中正确执行 Host
替换的任何库或例程?
编辑:对于我的用例,我希望我的主机替换与 java servlet 的响应相匹配。我通过运行本地 Java Web 服务器来尝试这个,然后使用 curl -H 'Host:superduper.com:80' 'http://localhost:8000/testurl'
测试它端点简单地从 request.getRequestURL().toString()
返回 url,其中 request 是一个 HttpServletRequest
。它返回了 http://superduper.com/testurl
,所以它删除了 http 的默认端口,所以这也是我努力的方向。
最佳答案
Spring 框架提供了UriComponentsBuilder
。你可以像这样使用它:
import org.springframework.web.util.UriComponentsBuilder;
String initialUri = "http://localhost/me/out?it=5";
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(initialUri);
String modifiedUri = builder.host("myserver").port("20000").toUriString();
System.out.println(modifiedUri);
// ==> http://myserver:20000/me/out?it=5
在这里您需要在单独的调用中提供主机名和端口以获得正确的编码。
关于Java - 替换 url 中的主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46667342/