aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/addons/setheaders.py
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/addons/setheaders.py')
-rw-r--r--mitmproxy/addons/setheaders.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/mitmproxy/addons/setheaders.py b/mitmproxy/addons/setheaders.py
new file mode 100644
index 00000000..5695e1e8
--- /dev/null
+++ b/mitmproxy/addons/setheaders.py
@@ -0,0 +1,39 @@
+from mitmproxy import exceptions
+from mitmproxy import flowfilter
+
+
+class SetHeaders:
+ def __init__(self):
+ self.lst = []
+
+ def configure(self, options, updated):
+ """
+ options.setheaders is a tuple of (fpatt, header, value)
+
+ fpatt: String specifying a filter pattern.
+ header: Header name.
+ value: Header value string
+ """
+ for fpatt, header, value in options.setheaders:
+ flt = flowfilter.parse(fpatt)
+ if not flt:
+ raise exceptions.OptionsError(
+ "Invalid setheader filter pattern %s" % fpatt
+ )
+ self.lst.append((fpatt, header, value, flt))
+
+ def run(self, f, hdrs):
+ for _, header, value, flt in self.lst:
+ if flt(f):
+ hdrs.pop(header, None)
+ for _, header, value, flt in self.lst:
+ if flt(f):
+ hdrs.add(header, value)
+
+ def request(self, flow):
+ if not flow.reply.has_message:
+ self.run(flow, flow.request.headers)
+
+ def response(self, flow):
+ if not flow.reply.has_message:
+ self.run(flow, flow.response.headers)