mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-30 11:19:23 +00:00
27 lines
1.1 KiB
Python
27 lines
1.1 KiB
Python
|
# This script makes mitmproxy switch to passthrough mode for all HTTP
|
||
|
# responses with "Connection: Upgrade" header. This is useful to make
|
||
|
# WebSockets work in untrusted environments.
|
||
|
#
|
||
|
# Note: Chrome (and possibly other browsers), when explicitly configured
|
||
|
# to use a proxy (i.e. mitmproxy's regular mode), send a CONNECT request
|
||
|
# to the proxy before they initiate the websocket connection.
|
||
|
# To make WebSockets work in these cases, supply
|
||
|
# `--ignore :80$` as an additional parameter.
|
||
|
# (see http://mitmproxy.org/doc/features/passthrough.html)
|
||
|
|
||
|
from libmproxy.protocol.http import HTTPRequest
|
||
|
from libmproxy.protocol.tcp import TCPHandler
|
||
|
from libmproxy.protocol import KILL
|
||
|
from libmproxy.script import concurrent
|
||
|
|
||
|
HTTPRequest._headers_to_strip_off.remove("Connection")
|
||
|
HTTPRequest._headers_to_strip_off.remove("Upgrade")
|
||
|
|
||
|
@concurrent
|
||
|
def response(context, flow):
|
||
|
if flow.response.headers.get_first("Connection", None) == "Upgrade":
|
||
|
# We need to send the response manually now...
|
||
|
flow.client_conn.send(flow.response.assemble())
|
||
|
# ...and then delegate to tcp passthrough.
|
||
|
TCPHandler(flow.live.c, log=False).handle_messages()
|
||
|
flow.reply(KILL)
|