diff options
author | Maximilian Hils <git@maximilianhils.com> | 2015-03-26 18:17:36 +0100 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2015-03-26 18:17:36 +0100 |
commit | 04f2467e84905d44483469cf43ada4ec44faa203 (patch) | |
tree | 9076642f7439a877d1839293739b75d3c0f805c5 /libmproxy/utils.py | |
parent | 9854379046a5464f4fd638785bafca87b91a495a (diff) | |
parent | 423530fc258ddd09642de401c4fd5cf71ed06be6 (diff) | |
download | mitmproxy-04f2467e84905d44483469cf43ada4ec44faa203.tar.gz mitmproxy-04f2467e84905d44483469cf43ada4ec44faa203.tar.bz2 mitmproxy-04f2467e84905d44483469cf43ada4ec44faa203.zip |
Merge branch 'master' of github.com:mitmproxy/mitmproxy
Diffstat (limited to 'libmproxy/utils.py')
-rw-r--r-- | libmproxy/utils.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/libmproxy/utils.py b/libmproxy/utils.py index 5ed70a45..02e8403b 100644 --- a/libmproxy/utils.py +++ b/libmproxy/utils.py @@ -69,6 +69,33 @@ def urlencode(s): return urllib.urlencode(s, False) +def multipartdecode(hdrs, content): + """ + Takes a multipart boundary encoded string and returns list of (key, value) tuples. + """ + v = hdrs.get_first("content-type") + if v: + v = parse_content_type(v) + if not v: + return [] + boundary = v[2].get("boundary") + if not boundary: + return [] + + rx = re.compile(r'\bname="([^"]+)"') + r = [] + + for i in content.split("--" + boundary): + parts = i.splitlines() + if len(parts) > 1 and parts[0][0:2] != "--": + match = rx.search(parts[1]) + if match: + key = match.group(1) + value = "".join(parts[3+parts[2:].index(""):]) + r.append((key, value)) + return r + return [] + def pretty_size(size): suffixes = [ ("B", 2**10), |