我试图确保传递给go程序的URL有效。但是,我似乎无法解决。我以为我可以解决问题url.Parse,但这似乎并没有完成。
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()) }
操场
有沿线的任何filter_var我可以使用吗?
您可以检查您的URL是否具有“方案”,“主机”和/或“路径”。
如果检查返回的URL,则可以看到无效部分已插入不透明数据部分(从某种意义上讲是有效的)。
url.URL{Scheme:"http", Opaque:"::/not.valid/a//a", Host:"", Path:"", RawQuery:"?a?b=&&c", Fragment:"hi"}
如果您解析一个URL并且没有Scheme,Host和Path,则可能会认为它无效。(尽管没有路径的主机通常可以,因为它暗示/,所以您需要检查一下)
/
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") }