aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBiping Meng <mengbiping@gmail.com>2017-07-26 18:19:38 +0800
committerBiping Meng <mengbiping@gmail.com>2017-07-26 18:19:38 +0800
commit1004460ba670c503702a46c01518c1da19c5047c (patch)
treeb1cd51c066ec8cb7d58b7b8885524b9581d81fe8
parentd409a6c09a873c8131c5e6938aea496904f324c3 (diff)
downloadmitmproxy-1004460ba670c503702a46c01518c1da19c5047c.tar.gz
mitmproxy-1004460ba670c503702a46c01518c1da19c5047c.tar.bz2
mitmproxy-1004460ba670c503702a46c01518c1da19c5047c.zip
Allow http_connect to create a response for CONNECT request so that connection to server be postponed in upstream mode.
-rw-r--r--mitmproxy/proxy/protocol/http.py21
1 files changed, 11 insertions, 10 deletions
diff --git a/mitmproxy/proxy/protocol/http.py b/mitmproxy/proxy/protocol/http.py
index 502280c1..728c2ba1 100644
--- a/mitmproxy/proxy/protocol/http.py
+++ b/mitmproxy/proxy/protocol/http.py
@@ -217,16 +217,17 @@ class HttpLayer(base.Layer):
return False
def handle_upstream_connect(self, f):
- self.establish_server_connection(
- f.request.host,
- f.request.port,
- f.request.scheme
- )
- self.send_request(f.request)
- f.response = self.read_response_headers()
- f.response.data.content = b"".join(
- self.read_response_body(f.request, f.response)
- )
+ if not f.response:
+ self.establish_server_connection(
+ f.request.host,
+ f.request.port,
+ f.request.scheme
+ )
+ self.send_request(f.request)
+ f.response = self.read_response_headers()
+ f.response.data.content = b"".join(
+ self.read_response_body(f.request, f.response)
+ )
self.send_response(f.response)
if is_ok(f.response.status_code):
layer = UpstreamConnectLayer(self, f.request)