确保 URI 有效

Lex*_*x R 2 validation url 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())
}
Run Code Online (Sandbox Code Playgroud)

操场

我可以使用filter_var 的任何内容吗?

Jim*_*imB 8

您可以检查您的 URL 是否具有方案、主机和/或路径。

如果您检查返回的 URL,您可以看到无效部分插入到 Opaque 数据部分(因此从某种意义上说,它是有效的)。

url.URL{Scheme:"http", Opaque:"::/not.valid/a//a", Host:"", Path:"", RawQuery:"?a?b=&&c", Fragment:"hi"}
Run Code Online (Sandbox Code Playgroud)

如果您解析一个 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")
}
Run Code Online (Sandbox Code Playgroud)