aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/http/http1
diff options
context:
space:
mode:
Diffstat (limited to 'netlib/http/http1')
-rw-r--r--netlib/http/http1/protocol.py50
1 files changed, 28 insertions, 22 deletions
diff --git a/netlib/http/http1/protocol.py b/netlib/http/http1/protocol.py
index c797e930..8eeb7744 100644
--- a/netlib/http/http1/protocol.py
+++ b/netlib/http/http1/protocol.py
@@ -7,18 +7,25 @@ from netlib import odict, utils, tcp, http
from netlib.http import semantics
from ..exceptions import *
+
class TCPHandler(object):
+
def __init__(self, rfile, wfile=None):
self.rfile = rfile
self.wfile = wfile
+
class HTTP1Protocol(semantics.ProtocolMixin):
def __init__(self, tcp_handler=None, rfile=None, wfile=None):
self.tcp_handler = tcp_handler or TCPHandler(rfile, wfile)
-
- def read_request(self, include_body=True, body_size_limit=None, allow_empty=False):
+ def read_request(
+ self,
+ include_body=True,
+ body_size_limit=None,
+ allow_empty=False,
+ ):
"""
Parse an HTTP request from a file stream
@@ -125,8 +132,12 @@ class HTTP1Protocol(semantics.ProtocolMixin):
timestamp_end,
)
-
- def read_response(self, request_method, body_size_limit, include_body=True):
+ def read_response(
+ self,
+ request_method,
+ body_size_limit,
+ include_body=True,
+ ):
"""
Returns an http.Response
@@ -171,7 +182,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
# read separately
body = None
-
if hasattr(self.tcp_handler.rfile, "first_byte_timestamp"):
# more accurate timestamp_start
timestamp_start = self.tcp_handler.rfile.first_byte_timestamp
@@ -191,7 +201,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
timestamp_end=timestamp_end,
)
-
def assemble_request(self, request):
assert isinstance(request, semantics.Request)
@@ -204,7 +213,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
headers = self._assemble_request_headers(request)
return "%s\r\n%s\r\n%s" % (first_line, headers, request.body)
-
def assemble_response(self, response):
assert isinstance(response, semantics.Response)
@@ -217,7 +225,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
headers = self._assemble_response_headers(response)
return "%s\r\n%s\r\n%s" % (first_line, headers, response.body)
-
def read_headers(self):
"""
Read a set of headers.
@@ -262,7 +269,7 @@ class HTTP1Protocol(semantics.ProtocolMixin):
response_code,
is_request,
max_chunk_size=None
- ):
+ ):
"""
Read an HTTP message body:
headers: An ODictCaseless object
@@ -317,9 +324,14 @@ class HTTP1Protocol(semantics.ProtocolMixin):
"HTTP Body too large. Limit is %s," % limit
)
-
@classmethod
- def expected_http_body_size(self, headers, is_request, request_method, response_code):
+ def expected_http_body_size(
+ self,
+ headers,
+ is_request,
+ request_method,
+ response_code,
+ ):
"""
Returns the expected body length:
- a positive integer, if the size is known in advance
@@ -372,7 +384,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
line = self.tcp_handler.rfile.readline()
return line
-
def _read_chunked(self, limit, is_request):
"""
Read a chunked HTTP body.
@@ -409,7 +420,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
if length == 0:
return
-
@classmethod
def _parse_http_protocol(self, line):
"""
@@ -429,7 +439,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
return None
return major, minor
-
@classmethod
def _parse_init(self, line):
try:
@@ -443,7 +452,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
return None
return method, url, httpversion
-
@classmethod
def _parse_init_connect(self, line):
"""
@@ -471,7 +479,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
return None
return host, port, httpversion
-
@classmethod
def _parse_init_proxy(self, line):
v = self._parse_init(line)
@@ -485,7 +492,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
scheme, host, port, path = parts
return method, scheme, host, port, path, httpversion
-
@classmethod
def _parse_init_http(self, line):
"""
@@ -501,7 +507,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
return None
return method, url, httpversion
-
@classmethod
def connection_close(self, httpversion, headers):
"""
@@ -521,7 +526,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
# be persistent
return httpversion != (1, 1)
-
@classmethod
def parse_response_line(self, line):
parts = line.strip().split(" ", 2)
@@ -536,7 +540,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
return None
return (proto, code, msg)
-
@classmethod
def _assemble_request_first_line(self, request):
return request.legacy_first_line()
@@ -557,7 +560,6 @@ class HTTP1Protocol(semantics.ProtocolMixin):
return headers.format()
-
def _assemble_response_first_line(self, response):
return 'HTTP/%s.%s %s %s' % (
response.httpversion[0],
@@ -566,7 +568,11 @@ class HTTP1Protocol(semantics.ProtocolMixin):
response.msg,
)
- def _assemble_response_headers(self, response, preserve_transfer_encoding=False):
+ def _assemble_response_headers(
+ self,
+ response,
+ preserve_transfer_encoding=False,
+ ):
headers = response.headers.copy()
for k in response._headers_to_strip_off:
del headers[k]