欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Golang解析、验证、修改URL之Host、Port、Path

程序员文章站 2022-10-09 14:07:21
Golang解析、验证、修改URL之Host、Port、Path ......
  • url解析验证问题
    • net.parseip()只能解析不带冒号以及端口号的ip4/ip6
      • ✔: 127.0.0.12001:db8::68
      • ✖: 127.0.0.1:8080www.baidu.com
    • url.parse()最好只用来解析标准url,不能用来验证url的正确性
func main() {
    ip1 := "www.baidu.com"
    ip2 := "127.0.0.1"
    ip3 := "127.0.0.1:8080"
    parsedip1 := net.parseip(ip1)
    parsedip2 := net.parseip(ip2)
    parsedip3 := net.parseip(ip3)
    fmt.println("net.parseip: ", parsedip1, parsedip2, parsedip3)

    fmt.println()

    url1 := "127.0.0"
    url2 := "abc"
    url3 := "127.0.0.1:8080"
    url4 := "http://127.0.0.1:8080/url"

    parsedurl1, err := url.parse(url1)
    if err != nil {
        fmt.println("error: ", err)
    }
    parsedurl2, err := url.parse(url2)
    if err != nil {
        fmt.println("error: ", err)
    }
    parsedurl3, err := url.parse(url3)
    if err != nil {
        fmt.println("error: ", err)
    }
    parsedurl4, err := url.parse(url4)
    if err != nil {
        fmt.println("error: ", err)
    }
    fmt.println("1: ", parsedurl1, "2: ", parsedurl2, "3: ", parsedurl3, "4: ", parsedurl4)
}
/*
输出结果:
net.parseip:  <nil> 127.0.0.1 <nil>

error:  parse 127.0.0.1:8080: first path segment in url cannot contain colon
1:  127.0.0 2:  abc 3:  <nil> 4:  http://127.0.0.1:8080/url

*/
  • 正确的url验证方式
    • go get github.com/asaskevich/govalidator
    • govalidator.isurl()
  • 获取并修改url之host、port、path
func main() {
    rawurl := "http://127.0.0.1:8080/url/123"
    changehost := "192.168.1.1"

    newurl, _ := url.parse(rawurl)

    // host
    newurlhost := newurl.hostname()
    // port
    newurlport := newurl.port()
    // path
    newurlpath := newurl.path
    // url类型转string
    stringurl := newurl.string()
    // 修改url host
    newurl.host = changehost + ":" + newurl.port()

    fmt.println(newurlhost, newurlport, newurlpath, stringurl, newurl)
}

其他相关方法:

  • host、port
    • net.splithostport() ==> host、port、error
    • u := strings.split(url, ":") ==> host := u[0]
  • path
    • url := http://www.a.com/123 ==> base := path.base(url)
    • fmt.println(base) ==> 123


      以上结合可完成关于golang操作url的大部分问题