github.com/aarzilli/tools@v0.0.0-20151123112009-0d27094f75e0/net/http/fetch/util.go (about) 1 package fetch 2 3 import ( 4 "net" 5 "net/http" 6 "net/url" 7 "strings" 8 9 "github.com/pbberlin/tools/net/http/loghttp" 10 ) 11 12 func HostFromReq(r *http.Request) string { 13 return splitPort(r.Host) 14 } 15 16 // A better url.Parse 17 func URLFromString(surl string) (*url.URL, error) { 18 19 // Prevent "google.com" => u.Host == "" when scheme == "" 20 if !strings.HasPrefix(surl, "http://") && !strings.HasPrefix(surl, "https://") { 21 surl = "https://" + surl 22 } 23 ourl, err := url.Parse(surl) 24 25 return ourl, err 26 27 } 28 29 func HostFromStringUrl(surl string) string { 30 31 // Prevent "google.com" => u.Host == "" when scheme == "" 32 if !strings.HasPrefix(surl, "http://") && !strings.HasPrefix(surl, "https://") { 33 surl = "https://" + surl 34 } 35 url2, _ := url.Parse(surl) 36 37 return splitPort(url2.Host) 38 } 39 40 func PathFromStringUrl(surl string) string { 41 42 // Prevent "google.com" => u.Host == "" when scheme == "" 43 if !strings.HasPrefix(surl, "http://") && !strings.HasPrefix(surl, "https://") { 44 surl = "https://" + surl 45 } 46 url2, _ := url.Parse(surl) 47 48 return splitPort(url2.Path) 49 } 50 51 func HostFromUrl(u *url.URL) string { 52 53 // Prevent "google.com" => u.Host == "" when scheme == "" 54 surl := u.String() 55 return HostFromStringUrl(surl) 56 } 57 58 func splitPort(hp string) string { 59 60 lg, b := loghttp.BuffLoggerUniversal(nil, nil) 61 _ = b 62 63 host, port, err := net.SplitHostPort(hp) 64 _ = port 65 66 if err != nil { 67 if strings.Contains(err.Error(), "missing port in address") { 68 // normal 69 } else { 70 lg(err) 71 } 72 host = hp 73 } 74 75 return host 76 }