aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/http
diff options
context:
space:
mode:
Diffstat (limited to 'netlib/http')
-rw-r--r--netlib/http/http1/assemble.py8
-rw-r--r--netlib/http/http1/read.py9
-rw-r--r--netlib/http/models.py24
3 files changed, 30 insertions, 11 deletions
diff --git a/netlib/http/http1/assemble.py b/netlib/http/http1/assemble.py
index ace25d79..33b9ef25 100644
--- a/netlib/http/http1/assemble.py
+++ b/netlib/http/http1/assemble.py
@@ -95,9 +95,9 @@ def _assemble_response_headers(response, preserve_transfer_encoding=False):
if not preserve_transfer_encoding:
headers.pop(b"Transfer-Encoding", None)
- # If body is defined (i.e. not None or CONTENT_MISSING), we always
- # add a content-length header.
- if response.body or response.body == b"":
- headers[b"Content-Length"] = str(len(response.body)).encode("ascii")
+ # If body is defined (i.e. not None or CONTENT_MISSING),
+ # we now need to set a content-length header.
+ if response.body or response.body == b"":
+ headers[b"Content-Length"] = str(len(response.body)).encode("ascii")
return bytes(headers)
diff --git a/netlib/http/http1/read.py b/netlib/http/http1/read.py
index 62025d15..7f2b7bab 100644
--- a/netlib/http/http1/read.py
+++ b/netlib/http/http1/read.py
@@ -4,15 +4,14 @@ import sys
import re
from ... import utils
-from ...exceptions import HttpReadDisconnect, HttpSyntaxException, HttpException
+from ...exceptions import HttpReadDisconnect, HttpSyntaxException, HttpException, TcpDisconnect
from .. import Request, Response, Headers
-from netlib.tcp import NetLibDisconnect
def read_request(rfile, body_size_limit=None):
request = read_request_head(rfile)
expected_body_size = expected_http_body_size(request)
- request.body = b"".join(read_body(rfile, expected_body_size, limit=body_size_limit))
+ request._body = b"".join(read_body(rfile, expected_body_size, limit=body_size_limit))
request.timestamp_end = time.time()
return request
@@ -51,7 +50,7 @@ def read_request_head(rfile):
def read_response(rfile, request, body_size_limit=None):
response = read_response_head(rfile)
expected_body_size = expected_http_body_size(request, response)
- response.body = b"".join(read_body(rfile, expected_body_size, body_size_limit))
+ response._body = b"".join(read_body(rfile, expected_body_size, body_size_limit))
response.timestamp_end = time.time()
return response
@@ -215,7 +214,7 @@ def _get_first_line(rfile):
if line == b"\r\n" or line == b"\n":
# Possible leftover from previous message
line = rfile.readline()
- except NetLibDisconnect:
+ except TcpDisconnect:
raise HttpReadDisconnect()
if not line:
raise HttpReadDisconnect()
diff --git a/netlib/http/models.py b/netlib/http/models.py
index 2d09535c..b4446ecb 100644
--- a/netlib/http/models.py
+++ b/netlib/http/models.py
@@ -231,7 +231,7 @@ class Request(object):
self.path = path
self.httpversion = httpversion
self.headers = headers
- self.body = body
+ self._body = body
self.timestamp_start = timestamp_start
self.timestamp_end = timestamp_end
self.form_out = form_out or form_in
@@ -453,6 +453,16 @@ class Request(object):
self.scheme, self.host, self.port, self.path = parts
@property
+ def body(self):
+ return self._body
+
+ @body.setter
+ def body(self, body):
+ self._body = body
+ if isinstance(body, bytes):
+ self.headers["Content-Length"] = str(len(body)).encode()
+
+ @property
def content(self): # pragma: no cover
# TODO: remove deprecated getter
return self.body
@@ -488,7 +498,7 @@ class Response(object):
self.status_code = status_code
self.msg = msg
self.headers = headers
- self.body = body
+ self._body = body
self.timestamp_start = timestamp_start
self.timestamp_end = timestamp_end
@@ -552,6 +562,16 @@ class Response(object):
self.headers.set_all("Set-Cookie", values)
@property
+ def body(self):
+ return self._body
+
+ @body.setter
+ def body(self, body):
+ self._body = body
+ if isinstance(body, bytes):
+ self.headers["Content-Length"] = str(len(body)).encode()
+
+ @property
def content(self): # pragma: no cover
# TODO: remove deprecated getter
return self.body