summary refs log tree commit diff
path: root/synapse/http/client.py
diff options
context:
space:
mode:
authorDavid Baker <dbkr@users.noreply.github.com>2016-03-08 13:51:49 +0000
committerDavid Baker <dbkr@users.noreply.github.com>2016-03-08 13:51:49 +0000
commitc00f4e48ba5fce36bfd6a8370b31e5dba1ae2432 (patch)
tree84de62f45861aeaa2776ee856ec0629ba227fe90 /synapse/http/client.py
parentMerge pull request #631 from matrix-org/markjh/py3v1 (diff)
parentpep8 (diff)
downloadsynapse-c00f4e48ba5fce36bfd6a8370b31e5dba1ae2432.tar.xz
Merge pull request #630 from matrix-org/dbkr/post_urlencoded_encode_params
Encode unicode objects given to post_urlencode*
Diffstat (limited to 'synapse/http/client.py')
-rw-r--r--synapse/http/client.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/synapse/http/client.py b/synapse/http/client.py
index fdd90b1c3c..cbd45b2bbe 100644
--- a/synapse/http/client.py
+++ b/synapse/http/client.py
@@ -103,7 +103,7 @@ class SimpleHttpClient(object):
         # TODO: Do we ever want to log message contents?
         logger.debug("post_urlencoded_get_json args: %s", args)
 
-        query_bytes = urllib.urlencode(args, True)
+        query_bytes = urllib.urlencode(encode_urlencode_args(args), True)
 
         response = yield self.request(
             "POST",
@@ -249,7 +249,7 @@ class CaptchaServerHttpClient(SimpleHttpClient):
 
     @defer.inlineCallbacks
     def post_urlencoded_get_raw(self, url, args={}):
-        query_bytes = urllib.urlencode(args, True)
+        query_bytes = urllib.urlencode(encode_urlencode_args(args), True)
 
         response = yield self.request(
             "POST",
@@ -269,6 +269,19 @@ class CaptchaServerHttpClient(SimpleHttpClient):
             defer.returnValue(e.response)
 
 
+def encode_urlencode_args(args):
+    return {k: encode_urlencode_arg(v) for k, v in args.items()}
+
+
+def encode_urlencode_arg(arg):
+    if isinstance(arg, unicode):
+        return arg.encode('utf-8')
+    elif isinstance(arg, list):
+        return [encode_urlencode_arg(i) for i in arg]
+    else:
+        return arg
+
+
 def _print_ex(e):
     if hasattr(e, "reasons") and e.reasons:
         for ex in e.reasons: