一尘不染

确保URI有效

go

我试图确保传递给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())
}

操场

有沿线的任何filter_var我可以使用吗?


阅读 175

收藏
2020-07-02

共1个答案

一尘不染

您可以检查您的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")
}
2020-07-02