diff options
-rw-r--r-- | mitmproxy/net/http/request.py | 3 | ||||
-rw-r--r-- | mitmproxy/tools/console/grideditor/editors.py | 12 | ||||
-rw-r--r-- | test/mitmproxy/net/http/test_request.py | 5 |
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 |