All of mitmproxy's basic functionality is exposed through the libmproxy library. The example below shows a simple implementation of the "sticky cookie" functionality included in the interactive mitmproxy program. Traffic is monitored for cookie and set-cookie headers, and requests are rewritten to include a previously seen cookie if they don't already have one. In effect, this lets you log in to a site using your browser, and then make subsequent requests using a tool like curl, which will then seem to be part of the authenticated session.
#!/usr/bin/env python """ This example builds on mitmproxy's base proxying infrastructure to implement functionality similar to the "sticky cookies" option. Heads Up: In the majority of cases, you want to use inline scripts. """ import os from libmproxy import controller, proxy from libmproxy.proxy.server import ProxyServer class StickyMaster(controller.Master): def __init__(self, server): controller.Master.__init__(self, server) self.stickyhosts = {} def run(self): try: return controller.Master.run(self) except KeyboardInterrupt: self.shutdown() def handle_request(self, flow): hid = (flow.request.host, flow.request.port) if flow.request.headers["cookie"]: self.stickyhosts[hid] = flow.request.headers["cookie"] elif hid in self.stickyhosts: flow.request.headers["cookie"] = self.stickyhosts[hid] flow.reply() def handle_response(self, flow): hid = (flow.request.host, flow.request.port) if flow.response.headers["set-cookie"]: self.stickyhosts[hid] = flow.response.headers["set-cookie"] flow.reply() config = proxy.ProxyConfig(port=8080) server = ProxyServer(config) m = StickyMaster(server) m.run()