我试图确保传递给我的 go 程序的 URL 是有效的。但是,我似乎不知道该怎么做。我以为我可以直接喂它url.Parse
,但这似乎不起作用。
package main
import (
"fmt"
"net/url"
)
func main() {
url, err := url.Parse("http:::/not.valid/a//a??a?b=&&c#hi")
if err != nil {
panic(err)
}
fmt.Println("It's valid!", url.String())
}
操场 http://play.golang.org/p/uhG4SsVfoW
有没有类似的事情过滤器变量 https://eval.in/190813我可以用?
您可以检查您的 URL 是否具有方案、主机和/或路径。
如果检查返回的 URL,您可以看到无效部分被插入到不透明数据部分中(因此从某种意义上说,它是有效的)。
url.URL{Scheme:"http", Opaque:"::/not.valid/a//a", Host:"", Path:"", RawQuery:"?a?b=&&c", Fragment:"hi"}
如果您解析 URL 并且没有方案、主机和路径,您可能会认为它无效。 (尽管没有路径的主机通常是可以的,因为这意味着/
,所以你需要检查一下)
u, err := url.Parse("http:::/not.valid/a//a??a?b=&&c#hi")
if err != nil {
log.Fatal(err)
}
if u.Scheme == "" || u.Host == "" || u.Path == "" {
log.Fatal("invalid URL")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)