Skip to content

goware/urlx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

URLx

Golang pkg for URL parsing and normalization.

  1. Parsing URL (GoDoc)
  2. Normalizing URL (GoDoc)
  3. Splitting host:port from URL (GoDoc)
  4. Resolving IP address from URL (GoDoc)

GoDoc Travis

Parsing URL

The urlx.Parse() is compatible with the same function from net/url pkg, but has slightly different behavior. It enforces default scheme and favors absolute URLs over relative paths.

Difference between urlx and net/url

github.com/goware/urlx net/url
urlx.Parse("example.com")

&url.URL{ Scheme: "http", Host: "example.com", Path: "", }

url.Parse("example.com")

&url.URL{ Scheme: "", Host: "", Path: "example.com", }

urlx.Parse("localhost:8080")

&url.URL{ Scheme: "http", Host: "localhost:8080", Path: "", Opaque: "", }

url.Parse("localhost:8080")

&url.URL{ Scheme: "localhost", Host: "", Path: "", Opaque: "8080", }

urlx.Parse("user.local:8000/path")

&url.URL{ Scheme: "http", Host: "user.local:8000", Path: "/path", Opaque: "", }

url.Parse("user.local:8000/path")

&url.URL{ Scheme: "user.local", Host: "", Path: "", Opaque: "8000/path", }

Usage

import "github.com/goware/urlx"

func main() {
    url, _ := urlx.Parse("example.com")
    // url.Scheme == "http"
    // url.Host == "example.com"

    fmt.Print(url)
    // Prints http://example.com
}

Normalizing URL

The urlx.Normalize() function normalizes the URL using the predefined subset of Purell flags.

Usage

import "github.com/goware/urlx"

func main() {
    url, _ := urlx.Parse("localhost:80///x///y/z/../././index.html?b=y&a=x#t=20")
    normalized, _ := urlx.Normalize(url)

    fmt.Print(normalized)
    // Prints http://localhost/x/y/index.html?a=x&b=y#t=20
}

Splitting host:port from URL

The urlx.SplitHostPort() is compatible with the same function from net pkg, but has slightly different behavior. It doesn't remove brackets from [IPv6] host.

Usage

import "github.com/goware/urlx"

func main() {
    url, _ := urlx.Parse("localhost:80")
    host, port, _ := urlx.SplitHostPort(url)

    fmt.Print(host)
    // Prints localhost

    fmt.Print(port)
    // Prints 80
}

Resolving IP address from URL

The urlx.Resolve() is compatible with ResolveIPAddr() from net.

Usage

url, _ := urlx.Parse("localhost")
ip, _ := urlx.Resolve(url)

fmt.Print(ip)
// Prints 127.0.0.1

License

URLx is licensed under the MIT License.