diff options
| -rw-r--r-- | docs/scripting/overview.rst | 6 | ||||
| -rw-r--r-- | examples/simple/add_header.py | 5 | ||||
| -rw-r--r-- | examples/simple/add_header_class.py | 5 | ||||
| -rw-r--r-- | examples/simple/custom_contentview.py | 3 | ||||
| -rw-r--r-- | examples/simple/filter_flows.py | 6 | ||||
| -rw-r--r-- | examples/simple/io_read_dumpfile.py | 1 | ||||
| -rw-r--r-- | examples/simple/io_write_dumpfile.py | 8 | ||||
| -rw-r--r-- | examples/simple/modify_body_inject_iframe.py | 4 | ||||
| -rw-r--r-- | examples/simple/modify_form.py | 5 | ||||
| -rw-r--r-- | examples/simple/modify_querystring.py | 5 | ||||
| -rw-r--r-- | examples/simple/redirect_requests.py | 3 | ||||
| -rw-r--r-- | examples/simple/send_reply_from_proxy.py | 2 | ||||
| -rw-r--r-- | examples/simple/upsidedownternet.py | 4 | ||||
| -rw-r--r-- | examples/simple/wsgi_flask_app.py | 2 | 
14 files changed, 40 insertions, 19 deletions
| diff --git a/docs/scripting/overview.rst b/docs/scripting/overview.rst index c333a98b..5ceb5da3 100644 --- a/docs/scripting/overview.rst +++ b/docs/scripting/overview.rst @@ -29,6 +29,12 @@ will be added to all responses passing through the proxy:  >>> mitmdump -s add_header.py +Examples +-------- + +A collection of addons that demonstrate popular features can be found at :src:`examples/simple`. + +  Using classes  ------------- diff --git a/examples/simple/add_header.py b/examples/simple/add_header.py index 3e0b5f1e..64fc6267 100644 --- a/examples/simple/add_header.py +++ b/examples/simple/add_header.py @@ -1,2 +1,5 @@ -def response(flow): +from mitmproxy import http + + +def response(flow: http.HTTPFlow) -> None:      flow.response.headers["newheader"] = "foo" diff --git a/examples/simple/add_header_class.py b/examples/simple/add_header_class.py index 5d5c7902..419c99ac 100644 --- a/examples/simple/add_header_class.py +++ b/examples/simple/add_header_class.py @@ -1,5 +1,8 @@ +from mitmproxy import http + +  class AddHeader: -    def response(self, flow): +    def response(self, flow: http.HTTPFlow) -> None:          flow.response.headers["newheader"] = "foo" diff --git a/examples/simple/custom_contentview.py b/examples/simple/custom_contentview.py index 34fa5541..289e1efe 100644 --- a/examples/simple/custom_contentview.py +++ b/examples/simple/custom_contentview.py @@ -3,6 +3,7 @@ This example shows how one can add a custom contentview to mitmproxy.  The content view API is explained in the mitmproxy.contentviews module.  """  from mitmproxy import contentviews +from typing import Tuple, Iterable, AnyStr, List  class ViewSwapCase(contentviews.View): @@ -13,7 +14,7 @@ class ViewSwapCase(contentviews.View):      prompt = ("swap case text", "z")      content_types = ["text/plain"] -    def __call__(self, data: bytes, **metadata): +    def __call__(self, data: bytes, **metadata) -> Tuple[str, Iterable[List[Tuple[str, AnyStr]]]]:          return "case-swapped text", contentviews.format_text(data.swapcase()) diff --git a/examples/simple/filter_flows.py b/examples/simple/filter_flows.py index fd49425a..70979591 100644 --- a/examples/simple/filter_flows.py +++ b/examples/simple/filter_flows.py @@ -2,12 +2,12 @@  This scripts demonstrates how to use mitmproxy's filter pattern in scripts.  """  from mitmproxy import flowfilter -from mitmproxy import ctx +from mitmproxy import ctx, http  class Filter:      def __init__(self): -        self.filter = None +        self.filter = None  # type: flowfilter.TFilter      def configure(self, updated):          self.filter = flowfilter.parse(ctx.options.flowfilter) @@ -17,7 +17,7 @@ class Filter:              "flowfilter", str, "", "Check that flow matches filter."          ) -    def response(self, flow): +    def response(self, flow: http.HTTPFlow) -> None:          if flowfilter.match(self.filter, flow):              print("Flow matches filter:")              print(flow) diff --git a/examples/simple/io_read_dumpfile.py b/examples/simple/io_read_dumpfile.py index edbbe2dd..87d37c0f 100644 --- a/examples/simple/io_read_dumpfile.py +++ b/examples/simple/io_read_dumpfile.py @@ -8,6 +8,7 @@ from mitmproxy.exceptions import FlowReadException  import pprint  import sys +  with open(sys.argv[1], "rb") as logfile:      freader = io.FlowReader(logfile)      pp = pprint.PrettyPrinter(indent=4) diff --git a/examples/simple/io_write_dumpfile.py b/examples/simple/io_write_dumpfile.py index a0956e33..7c4c6a7a 100644 --- a/examples/simple/io_write_dumpfile.py +++ b/examples/simple/io_write_dumpfile.py @@ -7,18 +7,18 @@ to multiple files in parallel.  """  import random  import sys -from mitmproxy import io +from mitmproxy import io, http  class Writer: -    def __init__(self, path): +    def __init__(self, path: str) -> None:          if path == "-": -            f = sys.stdout +            f = sys.stdout  # type: io.TextIO          else:              f = open(path, "wb")          self.w = io.FlowWriter(f) -    def response(self, flow): +    def response(self, flow: http.HTTPFlow) -> None:          if random.choice([True, False]):              self.w.add(flow) diff --git a/examples/simple/modify_body_inject_iframe.py b/examples/simple/modify_body_inject_iframe.py index dff72afa..595bd9f2 100644 --- a/examples/simple/modify_body_inject_iframe.py +++ b/examples/simple/modify_body_inject_iframe.py @@ -1,6 +1,6 @@  # (this script works best with --anticache)  from bs4 import BeautifulSoup -from mitmproxy import ctx +from mitmproxy import ctx, http  class Injector: @@ -9,7 +9,7 @@ class Injector:              "iframe", str, "", "IFrame to inject"          ) -    def response(self, flow): +    def response(self, flow: http.HTTPFlow) -> None:          if ctx.options.iframe:              html = BeautifulSoup(flow.response.content, "html.parser")              if html.body: diff --git a/examples/simple/modify_form.py b/examples/simple/modify_form.py index b425efb0..8742a976 100644 --- a/examples/simple/modify_form.py +++ b/examples/simple/modify_form.py @@ -1,4 +1,7 @@ -def request(flow): +from mitmproxy import http + + +def request(flow: http.HTTPFlow) -> None:      if flow.request.urlencoded_form:          # If there's already a form, one can just add items to the dict:          flow.request.urlencoded_form["mitmproxy"] = "rocks" diff --git a/examples/simple/modify_querystring.py b/examples/simple/modify_querystring.py index ee8a89ad..12b16fda 100644 --- a/examples/simple/modify_querystring.py +++ b/examples/simple/modify_querystring.py @@ -1,2 +1,5 @@ -def request(flow): +from mitmproxy import http + + +def request(flow: http.HTTPFlow) -> None:      flow.request.query["mitmproxy"] = "rocks" diff --git a/examples/simple/redirect_requests.py b/examples/simple/redirect_requests.py index 51876df7..ddb89961 100644 --- a/examples/simple/redirect_requests.py +++ b/examples/simple/redirect_requests.py @@ -1,9 +1,10 @@  """  This example shows two ways to redirect flows to another server.  """ +from mitmproxy import http -def request(flow): +def request(flow: http.HTTPFlow) -> None:      # pretty_host takes the "Host" header of the request into account,      # which is useful in transparent mode where we usually only have the IP      # otherwise. diff --git a/examples/simple/send_reply_from_proxy.py b/examples/simple/send_reply_from_proxy.py index bef2e7e7..5011fd2e 100644 --- a/examples/simple/send_reply_from_proxy.py +++ b/examples/simple/send_reply_from_proxy.py @@ -5,7 +5,7 @@ without sending any data to the remote server.  from mitmproxy import http -def request(flow): +def request(flow: http.HTTPFlow) -> None:      # pretty_url takes the "Host" header of the request into account, which      # is useful in transparent mode where we usually only have the IP otherwise. diff --git a/examples/simple/upsidedownternet.py b/examples/simple/upsidedownternet.py index 8ba450ab..f150a5c3 100644 --- a/examples/simple/upsidedownternet.py +++ b/examples/simple/upsidedownternet.py @@ -2,11 +2,11 @@  This script rotates all images passing through the proxy by 180 degrees.  """  import io -  from PIL import Image +from mitmproxy import http -def response(flow): +def response(flow: http.HTTPFlow) -> None:      if flow.response.headers.get("content-type", "").startswith("image"):          s = io.BytesIO(flow.response.content)          img = Image.open(s).rotate(180) diff --git a/examples/simple/wsgi_flask_app.py b/examples/simple/wsgi_flask_app.py index a03ad4c5..4be38000 100644 --- a/examples/simple/wsgi_flask_app.py +++ b/examples/simple/wsgi_flask_app.py @@ -10,7 +10,7 @@ app = Flask("proxapp")  @app.route('/') -def hello_world(): +def hello_world() -> str:      return 'Hello World!' | 
