From 191e6c2bbf4d8a8edaa891632a6817b7e22e16d0 Mon Sep 17 00:00:00 2001 From: Sungjin Han Date: Wed, 16 Dec 2015 12:05:36 +0900 Subject: [PATCH] Handle query strings properly when parsing url --- client.go | 10 +++++++++- client_test.go | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/client.go b/client.go index 3bf9b2e..598497f 100644 --- a/client.go +++ b/client.go @@ -95,12 +95,20 @@ func parseURL(s string) (*url.URL, error) { return nil, errMalformedURL } - u.Host = s + if i := strings.Index(s, "?"); i >= 0 { + u.Host, u.RawQuery = s[:i], s[i+1:] + } else { + u.Host = s + } + u.Opaque = "/" if i := strings.Index(s, "/"); i >= 0 { u.Host = s[:i] u.Opaque = s[i:] } + if i := strings.Index(u.Opaque, "?"); i >= 0 { + u.Opaque = u.Opaque[:i] + } if strings.Contains(u.Host, "@") { // Don't bother parsing user information because user information is diff --git a/client_test.go b/client_test.go index 07a9cb4..6da9604 100644 --- a/client_test.go +++ b/client_test.go @@ -21,6 +21,8 @@ var parseURLTests = []struct { {"wss://example.com/a/b", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/a/b"}}, {"ss://example.com/a/b", nil}, {"ws://webmaster@example.com/", nil}, + {"ws://example.com/a/b?param1=a¶m2=b", &url.URL{Scheme: "ws", Host: "example.com", Opaque: "/a/b", RawQuery: "param1=a¶m2=b"}}, + {"ws://example.com:7777?param1=a¶m2=b", &url.URL{Scheme: "ws", Host: "example.com:7777", Opaque: "/", RawQuery: "param1=a¶m2=b"}}, } func TestParseURL(t *testing.T) {