aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrjt-gupta <rajat.gupta99924@gmail.com>2018-12-14 21:31:34 +0530
committerrjt-gupta <rajat.gupta99924@gmail.com>2019-02-06 03:42:07 +0530
commit4df325335b4abcdea6d59314ebfc96e7465a3979 (patch)
tree2ba3f383f4b24d65695eff0774a4dfb22a848ba4
parent70777a1b6ed64af9cafcdef223a8a260ecc96864 (diff)
downloadmitmproxy-4df325335b4abcdea6d59314ebfc96e7465a3979.tar.gz
mitmproxy-4df325335b4abcdea6d59314ebfc96e7465a3979.tar.bz2
mitmproxy-4df325335b4abcdea6d59314ebfc96e7465a3979.zip
multipart-fix
-rw-r--r--mitmproxy/net/http/request.py3
-rw-r--r--mitmproxy/tools/console/grideditor/editors.py12
-rw-r--r--test/mitmproxy/net/http/test_request.py5
3 files changed, 15 insertions, 5 deletions
diff --git a/mitmproxy/net/http/request.py b/mitmproxy/net/http/request.py
index 959fdd33..218699e0 100644
--- a/mitmproxy/net/http/request.py
+++ b/mitmproxy/net/http/request.py
@@ -468,7 +468,8 @@ class Request(message.Message):
return ()
def _set_multipart_form(self, value):
- raise NotImplementedError()
+ self.headers["content-type"] = "multipart/form-data"
+ self.content = mitmproxy.net.http.url.encode(value, self.get_text(strict=False)).encode()
@property
def multipart_form(self):
diff --git a/mitmproxy/tools/console/grideditor/editors.py b/mitmproxy/tools/console/grideditor/editors.py
index 61fcf6b4..21cc8159 100644
--- a/mitmproxy/tools/console/grideditor/editors.py
+++ b/mitmproxy/tools/console/grideditor/editors.py
@@ -54,16 +54,24 @@ class ResponseHeaderEditor(HeaderEditor):
class RequestFormEditor(base.FocusEditor):
- title = "Edit URL-encoded Form"
+ title = "Edit Form"
columns = [
col_text.Column("Key"),
col_text.Column("Value")
]
def get_data(self, flow):
- return flow.request.urlencoded_form.items(multi=True)
+
+ if "application/x-www-form-urlencoded" in flow.request.headers['Content-Type']:
+ return flow.request.urlencoded_form.items(multi=True)
+
+ return flow.request.multipart_form.items(multi=True)
def set_data(self, vals, flow):
+
+ if "multipart/form-data" in flow.request.headers['Content-Type']:
+ flow.request.multipart_form = vals
+
flow.request.urlencoded_form = vals
diff --git a/test/mitmproxy/net/http/test_request.py b/test/mitmproxy/net/http/test_request.py
index ef581a91..6ef73389 100644
--- a/test/mitmproxy/net/http/test_request.py
+++ b/test/mitmproxy/net/http/test_request.py
@@ -372,5 +372,6 @@ class TestRequestUtils:
def test_set_multipart_form(self):
request = treq(content=b"foobar")
- with pytest.raises(NotImplementedError):
- request.multipart_form = "foobar"
+ request.multipart_form = [("filename", "shell.jpg"), ("file_size", "1000")]
+ assert request.headers['Content-Type'] == "multipart/form-data"
+ assert request.content