---
title: "Scripting"
menu:
    addons:
        weight: 5
---

# Scripting

Sometimes, we would like to write a quick script without going through the
trouble of creating a class. The addons mechanism has a shorthand that allows a
module as a whole to be treated as an addon object. This lets us place event
handler functions in the module scope. For instance, here is a complete script
that adds a header to every request.


{{< example src="examples/addons/scripting-headers.py" lang="py" >}}

---
title: "Scripting"
menu:
    addons:
        weight: 5
---

# Scripting

Sometimes, we would like to write a quick script without going through the
trouble of creating a class. The addons mechanism has a shorthand that allows a
module as a whole to be treated as an addon object. This lets us place event
handler functions in the module scope. For instance, here is a complete script
that adds a header to every request.


{{< example src="examples/addons/scripting-headers.py" lang="py" >}}


Here's another example that intercepts requests to a particular URL and sends
an arbitrary response instead:

{{< example src="examples/simple/send_reply_from_proxy.py" lang="py" >}}


You can look at the [http][] module, or the [Request][], and
[Response][] classes for other attributes that you can use when
scripting.

[http][]: https://github.com/mitmproxy/mitmproxy/blob/master/mitmproxy/http.py
[Request]: https://github.com/mitmproxy/mitmproxy/blob/master/mitmproxy/net/http/request.py
[Response]: https://github.com/mitmproxy/mitmproxy/blob/master/mitmproxy/net/http/response.py

Add example to intercept/change specific requests
Add example to intercept/change specific requests

This example captures requests to a specific URL and returns an
arbitrary response instead.  It's common enough that is useful to have
in the docs.

It also adds links to the Request and Response classes to help
developers writing scripts.
