aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/flow_export.py
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-02-10 16:05:03 +0100
committerMaximilian Hils <git@maximilianhils.com>2016-02-10 16:05:03 +0100
commit324184a25ab6ae2124d29200e263fb55654af1c2 (patch)
tree1828a1e1fb75340e603464eecbafcdf646d916f5 /libmproxy/flow_export.py
parentd5aa4f017d4a06ebe20fdb69563c319afd302ddb (diff)
parent33c514e2a7d0c2458cf7cbd7bcf1ee6762bd24fa (diff)
downloadmitmproxy-324184a25ab6ae2124d29200e263fb55654af1c2.tar.gz
mitmproxy-324184a25ab6ae2124d29200e263fb55654af1c2.tar.bz2
mitmproxy-324184a25ab6ae2124d29200e263fb55654af1c2.zip
Merge pull request #916 from dufferzafar/export-code
Export any flow request as Python code
Diffstat (limited to 'libmproxy/flow_export.py')
-rw-r--r--libmproxy/flow_export.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/libmproxy/flow_export.py b/libmproxy/flow_export.py
new file mode 100644
index 00000000..52145516
--- /dev/null
+++ b/libmproxy/flow_export.py
@@ -0,0 +1,73 @@
+import urllib
+import netlib.http
+from textwrap import dedent
+
+
+def curl_command(flow):
+ data = "curl "
+
+ for k, v in flow.request.headers.fields:
+ data += "-H '%s:%s' " % (k, v)
+
+ if flow.request.method != "GET":
+ data += "-X %s " % flow.request.method
+
+ full_url = flow.request.scheme + "://" + flow.request.host + flow.request.path
+ data += "'%s'" % full_url
+
+ if flow.request.content:
+ data += " --data-binary '%s'" % flow.request.content
+
+ return data
+
+
+def python_code(flow):
+ code = dedent("""
+ import requests
+
+ url = '{url}'
+ {headers}{params}{data}
+ response = requests.request(
+ method='{method}',
+ url=url,{args}
+ )
+
+ print(response.text)
+ """).strip()
+
+ components = map(lambda x: urllib.quote(x, safe=""), flow.request.path_components)
+ url = flow.request.scheme + "://" + flow.request.host + "/" + "/".join(components)
+
+ args = ""
+ headers = ""
+ if flow.request.headers:
+ lines = [" '%s': '%s',\n" % (k, v) for k, v in flow.request.headers.fields]
+ headers += "\nheaders = {\n%s}\n" % "".join(lines)
+ args += "\n headers=headers,"
+
+ params = ""
+ if flow.request.query:
+ lines = [" '%s': '%s',\n" % (k, v) for k, v in flow.request.query]
+ params = "\nparams = {\n%s}\n" % "".join(lines)
+ args += "\n params=params,"
+
+ data = ""
+ if flow.request.body:
+ data = "\ndata = '''%s'''\n" % flow.request.body
+ args += "\n data=data,"
+
+ code = code.format(
+ url=url,
+ headers=headers,
+ params=params,
+ data=data,
+ method=flow.request.method,
+ args=args,
+ )
+
+ return code
+
+
+def raw_request(flow):
+ data = netlib.http.http1.assemble_request(flow.request)
+ return data