diff options
author | Marcelo Glezer <mg@tekii.com.ar> | 2015-01-15 12:37:26 -0300 |
---|---|---|
committer | Marcelo Glezer <mg@tekii.com.ar> | 2015-02-05 11:31:24 -0300 |
commit | 8f66fe1bfc16d0bb63acc267632471640939371e (patch) | |
tree | fe3077dcbf1b28f16d20eab527f46c1cb0cf1de7 | |
parent | c57efffe01bdc29e08b5eaa1a9b7071336bd4bb1 (diff) | |
download | mitmproxy-8f66fe1bfc16d0bb63acc267632471640939371e.tar.gz mitmproxy-8f66fe1bfc16d0bb63acc267632471640939371e.tar.bz2 mitmproxy-8f66fe1bfc16d0bb63acc267632471640939371e.zip |
added support for saving file if content is binary. still wip
-rw-r--r-- | libmproxy/console/common.py | 44 | ||||
-rw-r--r-- | libmproxy/console/flowlist.py | 3 | ||||
-rw-r--r-- | libmproxy/console/flowview.py | 3 |
3 files changed, 44 insertions, 6 deletions
diff --git a/libmproxy/console/common.py b/libmproxy/console/common.py index 3ba89f8e..84dc8aef 100644 --- a/libmproxy/console/common.py +++ b/libmproxy/console/common.py @@ -1,6 +1,7 @@ from __future__ import absolute_import import urwid import urwid.util +import os from .. import utils from ..protocol.http import CONTENT_MISSING try: @@ -164,20 +165,55 @@ def raw_format_flow(f, focus, extended, padding): pile.append(urwid.Columns(resp, dividechars=1)) return urwid.Pile(pile) -def server_copy_response( k, response, statusbar): +## common save body parts +def _save_body(path, master, state, content): + if not path: + return + state.last_saveload = path + path = os.path.expanduser(path) + try: + f = file(path, "wb") + f.write(str(content)) + f.close() + except IOError, v: + master.statusbar.message(v.strerror) + +def save_body(k, master, state, content): + if k == "y": + master.path_prompt( + "Save response body: ", + state.last_saveload, + _save_body, + master, + state, + content, + ) + +## common server_copy_response parts +def server_copy_response( k, master, state, response): if pyperclip: if k == "c": try: pyperclip.copy(response.get_decoded_content()) except TypeError: - statusbar.message("Content is binary or can be converted to text") + master.prompt_onekey( + "Content is binary do you want to save it to a file instead?", + ( + ("yes", "y"), + ("no", "n"), + ), + save_body, + master, + state, + response.get_decoded_content(), + ) elif k == "h": try: pyperclip.copy(str(response.headers)) except TypeError: - statusbar.message("Error converting headers to text") + master.statusbar.message("Error converting headers to text") else: - statusbar.message("No clipboard support on your system, sorry.") + master.statusbar.message("No clipboard support on your system, sorry.") class FlowCache: diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index b2e2ba07..62c031b6 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -213,8 +213,9 @@ class ConnectionItem(common.WWrap): ("headers", "h"), ), common.server_copy_response, + self.master, + self.state, self.flow.response, - self.master.statusbar ) else: return key diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py index abca2ed6..bc0b5f83 100644 --- a/libmproxy/console/flowview.py +++ b/libmproxy/console/flowview.py @@ -760,8 +760,9 @@ class FlowView(common.WWrap): ("headers", "h"), ), common.server_copy_response, + self.master, + self.state, self.flow.response, - self.master.statusbar ) elif key == "m": p = list(contentview.view_prompts) |