aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2016-05-21 15:01:19 +1200
committerAldo Cortesi <aldo@nullcube.com>2016-05-21 15:01:19 +1200
commit97f3077082371a078380ec28e1425de3dc2a0021 (patch)
tree9bb2e4dfeacec85209174672fee3e78df32dcfaf /mitmproxy
parent14fb2eeb1ea734d161e84be3920691591f6531a3 (diff)
parent43d796553292a9bbf2c174e31e5e0e39e1068be1 (diff)
downloadmitmproxy-97f3077082371a078380ec28e1425de3dc2a0021.tar.gz
mitmproxy-97f3077082371a078380ec28e1425de3dc2a0021.tar.bz2
mitmproxy-97f3077082371a078380ec28e1425de3dc2a0021.zip
Merge branch 'mhils-multidict'
Diffstat (limited to 'mitmproxy')
-rw-r--r--mitmproxy/console/flowview.py50
-rw-r--r--mitmproxy/console/grideditor.py12
-rw-r--r--mitmproxy/flow.py34
-rw-r--r--mitmproxy/flow_export.py4
4 files changed, 47 insertions, 53 deletions
diff --git a/mitmproxy/console/flowview.py b/mitmproxy/console/flowview.py
index b2ebe49e..3538c4ad 100644
--- a/mitmproxy/console/flowview.py
+++ b/mitmproxy/console/flowview.py
@@ -6,8 +6,7 @@ import sys
import math
import urwid
-from netlib import odict
-from netlib.http import Headers
+from netlib.http import Headers, status_codes
from . import common, grideditor, signals, searchable, tabs
from . import flowdetailview
from .. import utils, controller, contentviews
@@ -316,21 +315,18 @@ class FlowView(tabs.Tabs):
return "Invalid URL."
signals.flow_change.send(self, flow = self.flow)
- def set_resp_code(self, code):
- response = self.flow.response
+ def set_resp_status_code(self, status_code):
try:
- response.status_code = int(code)
+ status_code = int(status_code)
except ValueError:
return None
- import BaseHTTPServer
- if int(code) in BaseHTTPServer.BaseHTTPRequestHandler.responses:
- response.msg = BaseHTTPServer.BaseHTTPRequestHandler.responses[
- int(code)][0]
+ self.flow.response.status_code = status_code
+ if status_code in status_codes.RESPONSES:
+ self.flow.response.reason = status_codes.RESPONSES[status_code]
signals.flow_change.send(self, flow = self.flow)
- def set_resp_msg(self, msg):
- response = self.flow.response
- response.msg = msg
+ def set_resp_reason(self, reason):
+ self.flow.response.reason = reason
signals.flow_change.send(self, flow = self.flow)
def set_headers(self, fields, conn):
@@ -338,22 +334,22 @@ class FlowView(tabs.Tabs):
signals.flow_change.send(self, flow = self.flow)
def set_query(self, lst, conn):
- conn.set_query(odict.ODict(lst))
+ conn.query = lst
signals.flow_change.send(self, flow = self.flow)
def set_path_components(self, lst, conn):
- conn.set_path_components(lst)
+ conn.path_components = lst
signals.flow_change.send(self, flow = self.flow)
def set_form(self, lst, conn):
- conn.set_form_urlencoded(odict.ODict(lst))
+ conn.urlencoded_form = lst
signals.flow_change.send(self, flow = self.flow)
def edit_form(self, conn):
self.master.view_grideditor(
grideditor.URLEncodedFormEditor(
self.master,
- conn.get_form_urlencoded().lst,
+ conn.urlencoded_form.items(multi=True),
self.set_form,
conn
)
@@ -364,7 +360,7 @@ class FlowView(tabs.Tabs):
self.edit_form(conn)
def set_cookies(self, lst, conn):
- conn.cookies = odict.ODict(lst)
+ conn.cookies = lst
signals.flow_change.send(self, flow = self.flow)
def set_setcookies(self, data, conn):
@@ -388,7 +384,7 @@ class FlowView(tabs.Tabs):
self.master.view_grideditor(
grideditor.CookieEditor(
self.master,
- message.cookies.lst,
+ message.cookies.items(multi=True),
self.set_cookies,
message
)
@@ -397,7 +393,7 @@ class FlowView(tabs.Tabs):
self.master.view_grideditor(
grideditor.SetCookieEditor(
self.master,
- message.cookies,
+ message.cookies.items(multi=True),
self.set_setcookies,
message
)
@@ -413,7 +409,7 @@ class FlowView(tabs.Tabs):
c = self.master.spawn_editor(message.content or "")
message.content = c.rstrip("\n")
elif part == "f":
- if not message.get_form_urlencoded() and message.content:
+ if not message.urlencoded_form and message.content:
signals.status_prompt_onekey.send(
prompt = "Existing body is not a URL-encoded form. Clear and edit?",
keys = [
@@ -435,7 +431,7 @@ class FlowView(tabs.Tabs):
)
)
elif part == "p":
- p = message.get_path_components()
+ p = message.path_components
self.master.view_grideditor(
grideditor.PathEditor(
self.master,
@@ -448,7 +444,7 @@ class FlowView(tabs.Tabs):
self.master.view_grideditor(
grideditor.QueryEditor(
self.master,
- message.get_query().lst,
+ message.query.items(multi=True),
self.set_query, message
)
)
@@ -458,7 +454,7 @@ class FlowView(tabs.Tabs):
text = message.url,
callback = self.set_url
)
- elif part == "m":
+ elif part == "m" and message == self.flow.request:
signals.status_prompt_onekey.send(
prompt = "Method",
keys = common.METHOD_OPTIONS,
@@ -468,13 +464,13 @@ class FlowView(tabs.Tabs):
signals.status_prompt.send(
prompt = "Code",
text = str(message.status_code),
- callback = self.set_resp_code
+ callback = self.set_resp_status_code
)
- elif part == "m":
+ elif part == "m" and message == self.flow.response:
signals.status_prompt.send(
prompt = "Message",
- text = message.msg,
- callback = self.set_resp_msg
+ text = message.reason,
+ callback = self.set_resp_reason
)
signals.flow_change.send(self, flow = self.flow)
diff --git a/mitmproxy/console/grideditor.py b/mitmproxy/console/grideditor.py
index 46ff348e..11ce7d02 100644
--- a/mitmproxy/console/grideditor.py
+++ b/mitmproxy/console/grideditor.py
@@ -700,17 +700,17 @@ class SetCookieEditor(GridEditor):
def data_in(self, data):
flattened = []
- for k, v in data.items():
- flattened.append([k, v[0], v[1].lst])
+ for key, (value, attrs) in data:
+ flattened.append([key, value, attrs.items(multi=True)])
return flattened
def data_out(self, data):
vals = []
- for i in data:
+ for key, value, attrs in data:
vals.append(
[
- i[0],
- [i[1], odict.ODictCaseless(i[2])]
+ key,
+ (value, attrs)
]
)
- return odict.ODict(vals)
+ return vals
diff --git a/mitmproxy/flow.py b/mitmproxy/flow.py
index ccedd1d4..a9018e16 100644
--- a/mitmproxy/flow.py
+++ b/mitmproxy/flow.py
@@ -158,9 +158,9 @@ class SetHeaders:
for _, header, value, cpatt in self.lst:
if cpatt(f):
if f.response:
- f.response.headers.fields.append((header, value))
+ f.response.headers.add(header, value)
else:
- f.request.headers.fields.append((header, value))
+ f.request.headers.add(header, value)
class StreamLargeBodies(object):
@@ -265,7 +265,7 @@ class ServerPlaybackState:
form_contents = r.urlencoded_form or r.multipart_form
if self.ignore_payload_params and form_contents:
key.extend(
- p for p in form_contents
+ p for p in form_contents.items(multi=True)
if p[0] not in self.ignore_payload_params
)
else:
@@ -321,10 +321,10 @@ class StickyCookieState:
"""
domain = f.request.host
path = "/"
- if attrs["domain"]:
- domain = attrs["domain"][-1]
- if attrs["path"]:
- path = attrs["path"][-1]
+ if "domain" in attrs:
+ domain = attrs["domain"]
+ if "path" in attrs:
+ path = attrs["path"]
return (domain, f.request.port, path)
def domain_match(self, a, b):
@@ -335,28 +335,26 @@ class StickyCookieState:
return False
def handle_response(self, f):
- for i in f.response.headers.get_all("set-cookie"):
+ for name, (value, attrs) in f.response.cookies.items(multi=True):
# FIXME: We now know that Cookie.py screws up some cookies with
# valid RFC 822/1123 datetime specifications for expiry. Sigh.
- name, value, attrs = cookies.parse_set_cookie_header(str(i))
a = self.ckey(attrs, f)
if self.domain_match(f.request.host, a[0]):
- b = attrs.lst
- b.insert(0, [name, value])
- self.jar[a][name] = odict.ODictCaseless(b)
+ b = attrs.with_insert(0, name, value)
+ self.jar[a][name] = b
def handle_request(self, f):
l = []
if f.match(self.flt):
- for i in self.jar.keys():
+ for domain, port, path in self.jar.keys():
match = [
- self.domain_match(f.request.host, i[0]),
- f.request.port == i[1],
- f.request.path.startswith(i[2])
+ self.domain_match(f.request.host, domain),
+ f.request.port == port,
+ f.request.path.startswith(path)
]
if all(match):
- c = self.jar[i]
- l.extend([cookies.format_cookie_header(c[name]) for name in c.keys()])
+ c = self.jar[(domain, port, path)]
+ l.extend([cookies.format_cookie_header(c[name].items(multi=True)) for name in c.keys()])
if l:
f.request.stickycookie = True
f.request.headers["cookie"] = "; ".join(l)
diff --git a/mitmproxy/flow_export.py b/mitmproxy/flow_export.py
index d8e65704..ae282fce 100644
--- a/mitmproxy/flow_export.py
+++ b/mitmproxy/flow_export.py
@@ -51,7 +51,7 @@ def python_code(flow):
params = ""
if flow.request.query:
- lines = [" '%s': '%s',\n" % (k, v) for k, v in flow.request.query]
+ lines = [" %s: %s,\n" % (repr(k), repr(v)) for k, v in flow.request.query.to_dict().items()]
params = "\nparams = {\n%s}\n" % "".join(lines)
args += "\n params=params,"
@@ -140,7 +140,7 @@ def locust_code(flow):
params = ""
if flow.request.query:
- lines = [" '%s': '%s',\n" % (k, v) for k, v in flow.request.query]
+ lines = [" %s: %s,\n" % (repr(k), repr(v)) for k, v in flow.request.query.to_dict().items()]
params = "\n params = {\n%s }\n" % "".join(lines)
args += "\n params=params,"