diff options
author | David Baker <dave@matrix.org> | 2016-03-08 10:04:38 +0000 |
---|---|---|
committer | David Baker <dave@matrix.org> | 2016-03-08 10:04:38 +0000 |
commit | 7bcee4733a05b239161d73461abd4d0e32caf4ac (patch) | |
tree | ce693ce8e3de8ee7162b2046bbff1717d7bc2e1a /synapse/http | |
parent | Merge pull request #626 from matrix-org/erikj/visibility (diff) | |
download | synapse-7bcee4733a05b239161d73461abd4d0e32caf4ac.tar.xz |
Encode unicode objects given to post_urlencode* otherwise urllib.urlencode chokes.
Diffstat (limited to '')
-rw-r--r-- | synapse/http/client.py | 14 |
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: |