aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/http/multipart.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@corte.si>2016-05-31 21:03:42 +1200
committerAldo Cortesi <aldo@corte.si>2016-05-31 21:03:42 +1200
commita7abf8b731658b4e7ed8705f7a94a6a62f08d51d (patch)
treecb86e2e483530f5e1e8b0c5d60839de21fcf7390 /netlib/http/multipart.py
parent2f526393d29b6a03e43d1f6240175b4dfb13dc7d (diff)
parent4da125b6a098cc0fd8b1fd2878584beb5df75c6c (diff)
downloadmitmproxy-a7abf8b731658b4e7ed8705f7a94a6a62f08d51d.tar.gz
mitmproxy-a7abf8b731658b4e7ed8705f7a94a6a62f08d51d.tar.bz2
mitmproxy-a7abf8b731658b4e7ed8705f7a94a6a62f08d51d.zip
Merge pull request #1179 from cortesi/reorg
Start reorganising */utils.py
Diffstat (limited to 'netlib/http/multipart.py')
-rw-r--r--netlib/http/multipart.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/netlib/http/multipart.py b/netlib/http/multipart.py
new file mode 100644
index 00000000..a135eb86
--- /dev/null
+++ b/netlib/http/multipart.py
@@ -0,0 +1,32 @@
+import re
+
+from . import headers
+
+
+def decode(hdrs, content):
+ """
+ Takes a multipart boundary encoded string and returns list of (key, value) tuples.
+ """
+ v = hdrs.get("content-type")
+ if v:
+ v = headers.parse_content_type(v)
+ if not v:
+ return []
+ try:
+ boundary = v[2]["boundary"].encode("ascii")
+ except (KeyError, UnicodeError):
+ return []
+
+ rx = re.compile(br'\bname="([^"]+)"')
+ r = []
+
+ for i in content.split(b"--" + boundary):
+ parts = i.splitlines()
+ if len(parts) > 1 and parts[0][0:2] != b"--":
+ match = rx.search(parts[1])
+ if match:
+ key = match.group(1)
+ value = b"".join(parts[3 + parts[2:].index(b""):])
+ r.append((key, value))
+ return r
+ return []