当前位置: > > > > 在 Go 中替换 URL 中的协议和主机名
来源:stackoverflow
2024-04-20 19:00:41
0浏览
收藏
一分耕耘,一分收获!既然打开了这篇文章《在 Go 中替换 URL 中的协议和主机名》,就坚持看下去吧!文中内容包含等等知识点…希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!
问题内容
Go 中是否有一种直接的方法来修改 URL/URI,而无需使用正则表达式来提取组件(即,我正在寻找一种确定性的“经过验证的”方式/方法)。
例如,我有两种类型的 URL 发送到我的应用程序:
http://wiley.coyote.acme.co/this/is/a/long/path?param1=123¶m2=456
https://road.runner.acme.co/another/long/path?meep=meep
我需要做的是重写 URL,以便参数列表和端点/路径完好无损,但协议从 http
更改为 https
(除非它已经是 https
),并且整个主机名/FQDN 需要是更改为 egghead.local
。因此,例如,上面的两个 URL 将变为:
https://egghead.local/this/is/a/long/path?param1=123¶m2=456
https://egghead.local/another/long/path?meep=meep
是否有可靠/成熟的方法来处理这个问题(例如最好没有正则表达式)?
解决方案
使用包:
func tohttps(addr string) (string, error) { u, err := url.parse(addr) if err != nil { return "", err } u.scheme = "https" return u.string(), nil }
或
func setHostname(addr, hostname string) (string, error) { u, err := url.Parse(addr) if err != nil { return "", err } u.Host = hostname return u.String(), nil }
以上就是《在 Go 中替换 URL 中的协议和主机名》的详细内容,更多关于的资料请关注公众号!