HTTP/HTTPS proxy in a single python script
Python Shell
Switch branches/tags
Nothing to show
Clone or download
Latest commit b2bab64 Jun 25, 2017
Permalink
Failed to load latest commit information.
examples new initial Jun 6, 2017
LICENSE new initial Jun 6, 2017
README.md update README.md Jun 25, 2017
https_trasparent.py new initial Jun 6, 2017
proxy2.py new initial Jun 6, 2017
setup_https_intercept.sh new initial Jun 6, 2017

README.md

proxy2

HTTP/HTTPS proxy in a single python script

Features

  • easy to customize
  • require no external modules
  • support both of IPv4 and IPv6
  • support HTTP/1.1 Persistent Connection
  • support dynamic certificate generation for HTTPS intercept

This script works on Python 2.7. You need to install OpenSSL to intercept HTTPS connections.

Usage

Just run as a script:

$ python proxy2.py

Above command runs the proxy on localhost:8080. Verify it works by typing the below command on another terminal of the same host.

$ http_proxy=localhost:8080 curl http://www.example.com/

proxy2 is made for debugging/testing, so it only accepts connections from localhost.

To use another port, specify the port number as the first argument.

$ python proxy2.py 3128

Enable HTTPS intercept

To intercept HTTPS connections, generate private keys and a private CA certificate:

$ ./setup_https_intercept.sh

Through the proxy, you can access http://proxy2.test/ and install the CA certificate in the browsers.

Customization

You can easily customize the proxy and modify the requests/responses or save something to the files. The ProxyRequestHandler class has 3 methods to customize:

  • request_handler: called before accessing the upstream server
  • response_handler: called before responding to the client
  • save_handler: called after responding to the client with the exclusive lock, so you can safely write out to the terminal or the file system

By default, only save_handler is implemented which outputs HTTP(S) headers and some useful data to the standard output.