aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/utils.py
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2015-03-26 18:17:36 +0100
committerMaximilian Hils <git@maximilianhils.com>2015-03-26 18:17:36 +0100
commit04f2467e84905d44483469cf43ada4ec44faa203 (patch)
tree9076642f7439a877d1839293739b75d3c0f805c5 /libmproxy/utils.py
parent9854379046a5464f4fd638785bafca87b91a495a (diff)
parent423530fc258ddd09642de401c4fd5cf71ed06be6 (diff)
downloadmitmproxy-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.py27
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),