diff --git a/oauth2/__init__.py b/oauth2/__init__.py
index 835270e..6fd2a15 100644
--- a/oauth2/__init__.py
+++ b/oauth2/__init__.py
@@ -608,7 +608,10 @@ class Request(dict):
"""Turn URL string into parameters."""
parameters = parse_qs(param_str.encode('utf-8'), keep_blank_values=True)
for k, v in parameters.iteritems():
- parameters[k] = urllib.unquote(v[0])
+ if len(v) == 1:
+ parameters[k] = urllib.unquote(v[0])
+ else:
+ parameters[k] = [ urllib.unquote(i) for i in v ]
return parameters
diff --git a/tests/test_oauth.py b/tests/test_oauth.py
index 099e579..d6ab882 100644
--- a/tests/test_oauth.py
+++ b/tests/test_oauth.py
@@ -889,6 +889,13 @@ class TestRequest(unittest.TestCase, ReallyEqualMixin):
req = oauth.Request.from_request("GET", url)
self.assertEquals(None, req)
+ def test_from_request_with_query_string(self):
+ url = "http://sp.example.com/"
+ qs = 'multi=BAR&multi=FOO&multi_same=FOO&multi_same=Foo&oath_consumer_key=0685bd9184jfhq22&oauth_nonce=4572616e48616d6d65724c61686176&oauth_signature_method=HMAC_SHA1&oauth_timestamp=137131200&oauth_token=ad180jjd733klru7&oauth_version=1.0'
+ req = oauth.Request.from_request('GET', url, query_string=qs)
+ res = req.get_normalized_parameters()
+ self.assertEquals(qs, res)
+
def test_from_token_and_callback(self):
url = "http://sp.example.com/"