Handle query strings properly when parsing url

This commit is contained in:
Sungjin Han 2015-12-16 12:05:36 +09:00
parent 844dd6d40e
commit 191e6c2bbf
2 changed files with 11 additions and 1 deletions

View File

@ -95,12 +95,20 @@ func parseURL(s string) (*url.URL, error) {
return nil, errMalformedURL return nil, errMalformedURL
} }
if i := strings.Index(s, "?"); i >= 0 {
u.Host, u.RawQuery = s[:i], s[i+1:]
} else {
u.Host = s u.Host = s
}
u.Opaque = "/" u.Opaque = "/"
if i := strings.Index(s, "/"); i >= 0 { if i := strings.Index(s, "/"); i >= 0 {
u.Host = s[:i] u.Host = s[:i]
u.Opaque = s[i:] u.Opaque = s[i:]
} }
if i := strings.Index(u.Opaque, "?"); i >= 0 {
u.Opaque = u.Opaque[:i]
}
if strings.Contains(u.Host, "@") { if strings.Contains(u.Host, "@") {
// Don't bother parsing user information because user information is // Don't bother parsing user information because user information is

View File

@ -21,6 +21,8 @@ var parseURLTests = []struct {
{"wss://example.com/a/b", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/a/b"}}, {"wss://example.com/a/b", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/a/b"}},
{"ss://example.com/a/b", nil}, {"ss://example.com/a/b", nil},
{"ws://webmaster@example.com/", nil}, {"ws://webmaster@example.com/", nil},
{"ws://example.com/a/b?param1=a&param2=b", &url.URL{Scheme: "ws", Host: "example.com", Opaque: "/a/b", RawQuery: "param1=a&param2=b"}},
{"ws://example.com:7777?param1=a&param2=b", &url.URL{Scheme: "ws", Host: "example.com:7777", Opaque: "/", RawQuery: "param1=a&param2=b"}},
} }
func TestParseURL(t *testing.T) { func TestParseURL(t *testing.T) {