summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Baker <dave@matrix.org>2016-03-08 10:04:38 +0000
committerDavid Baker <dave@matrix.org>2016-03-08 10:04:38 +0000
commit7bcee4733a05b239161d73461abd4d0e32caf4ac (patch)
treece693ce8e3de8ee7162b2046bbff1717d7bc2e1a
parentMerge pull request #626 from matrix-org/erikj/visibility (diff)
downloadsynapse-7bcee4733a05b239161d73461abd4d0e32caf4ac.tar.xz
Encode unicode objects given to post_urlencode* otherwise urllib.urlencode chokes.
-rw-r--r--synapse/http/client.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/synapse/http/client.py b/synapse/http/client.py

index fdd90b1c3c..b3cd5ff26a 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", @@ -268,6 +268,16 @@ class CaptchaServerHttpClient(SimpleHttpClient): # twisted dislikes google's response, no content length. 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: