⚡ Fast • 🪶 Lightweight • 0️⃣ Dependency • 🔌 Pluggable • 😈 TLS interception • 🔒 DNS-over-HTTPS • 🔥 Poor Man's VPN • ⏪ Reverse & ⏩ Forward • 👮🏿 "Proxy Server" framework • 🌐 "Web Server" framework • ➵ ➶ ➷ ➠ "PubSub" framework • 👷 "Work" acceptor & executor f
dns-over-httpsdockergfwhttp-proxyhttp-serverhttps-proxyjournalismman-in-the-middlemitmmitmproxynetflixproxyproxy-serverpython3reverse-proxystarred-abhinavsingh-repostarred-repotls-interceptiontunnelvpnweb-serverwebserver
6ea42b0dd9
Load plugins during test execution Further decouple proxy/webserver logic outside of HttpProtocolHandler. Per connection plugin instances to avoid locks Handle BrokenPipeError and teardown if read_from_descriptors return True |
||
---|---|---|
.dockerignore | ||
.gitignore | ||
.travis.yml | ||
Dockerfile | ||
LICENSE | ||
MANIFEST.in | ||
Makefile | ||
ProxyPy.png | ||
README.md | ||
plugin_examples.py | ||
proxy.py | ||
requirements-dev.txt | ||
setup.py | ||
tests.py |
README.md
Features
- Distributed as a single file module
- No external dependency other than standard Python library
- Support for
http
,https
,http2
andwebsockets
request proxy - Optimize for large file uploads and downloads
- IPv4 and IPv6 support
- Basic authentication support
- Can serve a PAC (Proxy Auto-configuration) file
Install
To install proxy.py, simply:
$ pip install --upgrade proxy.py
Using docker:
$ docker run -it -p 8899:8899 --rm abhinavsingh/proxy.py
Usage
$ proxy.py -h
usage: proxy.py [-h] [--backlog BACKLOG] [--basic-auth BASIC_AUTH]
[--client-recvbuf-size CLIENT_RECVBUF_SIZE]
[--hostname HOSTNAME] [--ipv4 IPV4] [--log-level LOG_LEVEL]
[--open-file-limit OPEN_FILE_LIMIT] [--port PORT]
[--pac-file PAC_FILE]
[--server-recvbuf-size SERVER_RECVBUF_SIZE]
[--num-workers NUM_WORKERS]
proxy.py v0.4
optional arguments ordered alphabetically:
-h, --help show this help message and exit
--backlog BACKLOG Default: 100. Maximum number of pending connections to
proxy server
--basic-auth BASIC_AUTH
Default: No authentication. Specify colon separated
user:password to enable basic authentication.
--client-recvbuf-size CLIENT_RECVBUF_SIZE
Default: 8 KB. Maximum amount of data received from
the client in a single recv() operation. Bump this
value for faster uploads at the expense of increased
RAM.
--hostname HOSTNAME Default: 127.0.0.1. Server IP address.
--ipv4 IPV4 Whether to listen on IPv4 address. By default server
only listens on IPv6.
--log-level LOG_LEVEL
Valid options: DEBUG, INFO (default), WARNING, ERROR,
CRITICAL. Both upper and lowercase values are
allowed.You may also simply use the leading character
e.g. --log-level d
--log-format LOG_FORMAT
Log format for Python logger.
--open-file-limit OPEN_FILE_LIMIT
Default: 1024. Maximum number of files (TCP
connections) that proxy.py can open concurrently.
--port PORT Default: 8899. Server port.
--pac-file PAC_FILE A file (Proxy Auto Configuration) or string to serve
when the server receives a direct file request.
--server-recvbuf-size SERVER_RECVBUF_SIZE
Default: 8 KB. Maximum amount of data received from
the server in a single recv() operation. Bump this
value for faster downloads at the expense of increased
RAM.
--num-workers NUM_WORKERS
Defaults to number of CPU cores.
Proxy.py not working? Report at:
https://github.com/abhinavsingh/proxy.py/issues/new