aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/protocol/http.py
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2015-09-11 01:18:17 +0200
committerMaximilian Hils <git@maximilianhils.com>2015-09-11 01:18:17 +0200
commitc159c8ca13afa6a909f456e41c1a3f57b98baf8a (patch)
treee502fbd569dd417034c4446341f0f750c371afa8 /libmproxy/protocol/http.py
parent30f0ee40c51fc6bc911169f044677e235087161e (diff)
downloadmitmproxy-c159c8ca13afa6a909f456e41c1a3f57b98baf8a.tar.gz
mitmproxy-c159c8ca13afa6a909f456e41c1a3f57b98baf8a.tar.bz2
mitmproxy-c159c8ca13afa6a909f456e41c1a3f57b98baf8a.zip
fix chunked encoding
Diffstat (limited to 'libmproxy/protocol/http.py')
-rw-r--r--libmproxy/protocol/http.py22
1 files changed, 14 insertions, 8 deletions
diff --git a/libmproxy/protocol/http.py b/libmproxy/protocol/http.py
index 308fa0a0..636b72f4 100644
--- a/libmproxy/protocol/http.py
+++ b/libmproxy/protocol/http.py
@@ -1,7 +1,9 @@
from __future__ import (absolute_import, print_function, division)
-import six
+import itertools
import sys
+import six
+
from netlib import tcp
from netlib.http import http1, HttpErrorConnClosed, HttpError, Headers
from netlib.http.semantics import CONTENT_MISSING
@@ -9,14 +11,13 @@ from netlib.tcp import NetLibError, Address
from netlib.http.http1 import HTTP1Protocol
from netlib.http.http2 import HTTP2Protocol
from netlib.http.http2.frame import GoAwayFrame, PriorityFrame, WindowUpdateFrame
-
from .. import utils
from ..exceptions import InvalidCredentials, HttpException, ProtocolException
from ..models import (
HTTPFlow, HTTPRequest, HTTPResponse, make_error_response, make_connect_response, Error
)
from .base import Layer, Kill
-from .rawtcp import RawTCPLayer
+
class _HttpLayer(Layer):
supports_streaming = False
@@ -108,16 +109,21 @@ class Http1Layer(_StreamingHttpLayer):
response,
preserve_transfer_encoding=True
)
- self.client_conn.send(h + "\r\n")
+ self.client_conn.wfile.write(h + "\r\n")
+ self.client_conn.wfile.flush()
def send_response_body(self, response, chunks):
if self.client_protocol.has_chunked_encoding(response.headers):
- chunks = (
- "%d\r\n%s\r\n" % (len(chunk), chunk)
- for chunk in chunks
+ chunks = itertools.chain(
+ (
+ "{:x}\r\n{}\r\n".format(len(chunk), chunk)
+ for chunk in chunks if chunk
+ ),
+ ("0\r\n\r\n",)
)
for chunk in chunks:
- self.client_conn.send(chunk)
+ self.client_conn.wfile.write(chunk)
+ self.client_conn.wfile.flush()
def check_close_connection(self, flow):
close_connection = (