在Go中替换URL中的协议和主机名

pftdvrlh  于 2023-06-19  发布在  Go
关注(0)|答案(1)|浏览(134)

在Go语言中,是否有一种直接的方法来修改URL/URI,而不必使用正则表达式来提取组件(即我正在寻找一个确定性的“尝试和真实”的方式/方法)。
例如,我有两种类型的URL被发送到我的应用程序:

  • http://wiley.coyote.acme.co/this/is/a/long/path?param1=123&param2=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&param2=456
  • https://egghead.local/another/long/path?meep=meep

是否有可靠/成熟的方法来处理此问题(例如最好没有正则表达式)?

xmd2e60i

xmd2e60i1#

使用url包:

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
}

相关问题