aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/http/http1
diff options
context:
space:
mode:
Diffstat (limited to 'netlib/http/http1')
-rw-r--r--netlib/http/http1/__init__.py1
-rw-r--r--netlib/http/http1/assemble.py4
-rw-r--r--netlib/http/http1/read.py18
3 files changed, 14 insertions, 9 deletions
diff --git a/netlib/http/http1/__init__.py b/netlib/http/http1/__init__.py
index a72c2e05..2d33ff8a 100644
--- a/netlib/http/http1/__init__.py
+++ b/netlib/http/http1/__init__.py
@@ -1,3 +1,4 @@
+from __future__ import absolute_import, print_function, division
from .read import (
read_request, read_request_head,
read_response, read_response_head,
diff --git a/netlib/http/http1/assemble.py b/netlib/http/http1/assemble.py
index 47c7e95a..ace25d79 100644
--- a/netlib/http/http1/assemble.py
+++ b/netlib/http/http1/assemble.py
@@ -25,9 +25,9 @@ def assemble_response(response):
return head + response.body
-def assemble_response_head(response):
+def assemble_response_head(response, preserve_transfer_encoding=False):
first_line = _assemble_response_line(response)
- headers = _assemble_response_headers(response)
+ headers = _assemble_response_headers(response, preserve_transfer_encoding)
return b"%s\r\n%s\r\n" % (first_line, headers)
diff --git a/netlib/http/http1/read.py b/netlib/http/http1/read.py
index 4c423c4c..62025d15 100644
--- a/netlib/http/http1/read.py
+++ b/netlib/http/http1/read.py
@@ -6,8 +6,7 @@ import re
from ... import utils
from ...exceptions import HttpReadDisconnect, HttpSyntaxException, HttpException
from .. import Request, Response, Headers
-
-ALPN_PROTO_HTTP1 = b'http/1.1'
+from netlib.tcp import NetLibDisconnect
def read_request(rfile, body_size_limit=None):
@@ -157,10 +156,10 @@ def connection_close(http_version, headers):
# If we don't have a Connection header, HTTP 1.1 connections are assumed to
# be persistent
- return http_version != (1, 1)
+ return http_version != b"HTTP/1.1"
-def expected_http_body_size(request, response=False):
+def expected_http_body_size(request, response=None):
"""
Returns:
The expected body length:
@@ -211,10 +210,13 @@ def expected_http_body_size(request, response=False):
def _get_first_line(rfile):
- line = rfile.readline()
- if line == b"\r\n" or line == b"\n":
- # Possible leftover from previous message
+ try:
line = rfile.readline()
+ if line == b"\r\n" or line == b"\n":
+ # Possible leftover from previous message
+ line = rfile.readline()
+ except NetLibDisconnect:
+ raise HttpReadDisconnect()
if not line:
raise HttpReadDisconnect()
line = line.strip()
@@ -317,6 +319,8 @@ def _read_headers(rfile):
try:
name, value = line.split(b":", 1)
value = value.strip()
+ if not name or not value:
+ raise ValueError()
ret.append([name, value])
except ValueError:
raise HttpSyntaxException("Invalid headers")