Beispiel #1
0
 def setup_response():
     headers = HTTPHeaders()
     for line in handler._generate_headers().split("\r\n"):
         if line.startswith("HTTP") or not line.strip():
             continue
         headers.parse_line(line)
     for cookie in headers.get_list("Set-Cookie"):
         self.cookies.load(cookie)
     response_body = connection.transport.io.getvalue()
     handler.content = response_body.split("\r\n\r\n", 1)[1]
     handler.headers = headers
Beispiel #2
0
 def setup_response():
     headers = HTTPHeaders()
     for line in handler._generate_headers().split("\r\n"):
         if line.startswith("HTTP") or not line.strip():
             continue
         headers.parse_line(line)
     for cookie in headers.get_list("Set-Cookie"):
         self.cookies.load(cookie)
     response_body = connection.transport.io.getvalue()
     handler.content = response_body.split("\r\n\r\n", 1)[1]
     handler.headers = headers
Beispiel #3
0
 def test_parse_crlf(self):
     """
     https://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.3
     "The line terminator for message-header fields is the sequence CRLF.
      However, we recommend that applications, when parsing such headers,
      recognize a single LF as a line terminator and ignore the leading CR."
     """
     header_data = u"Foo: bar\r\n" u"Baz: qux"
     headers = HTTPHeaders.parse(header_data)
     self.assertEqual(len(list(headers.get_all())), 2)
     self.assertEqual(headers.get("foo"), "bar")
     self.assertEqual(headers.get("baz"), "qux")
Beispiel #4
0
    def test_parse_problematic_newlines(self):
        """
        There are some problematic characters that Python considers to be newlines
        for the purpose of splitlines, but aren't newlines per the RFCs.

        https://docs.python.org/3/library/stdtypes.html#str.splitlines
        """
        header_data = (
            u"Foo: bar\x0b\x0c\x1c\x1d\x1e\x85\u2028\u2029asdf: jkl\r\n"
            u"Baz: qux")
        headers = HTTPHeaders.parse(header_data)
        self.assertEqual(len(list(headers.get_all())), 2)
        self.assertEqual(headers.get("foo"),
                         u"bar\x0b\x0c\x1c\x1d\x1e\x85\u2028\u2029asdf: jkl")
        self.assertEqual(headers.get("baz"), "qux")
Beispiel #5
0
    def test_parse_no_cr(self):
        """
        https://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.3
        "The line terminator for message-header fields is the sequence CRLF.
         However, we recommend that applications, when parsing such headers,
         recognize a single LF as a line terminator and ignore the leading CR."

	https://tools.ietf.org/html/rfc7230#section-3.5
        "Although the line terminator for the start-line and header fields is
         the sequence CRLF, a recipient MAY recognize a single LF as a line
         terminator and ignore any preceding CR."
        """
        header_data = u"Foo: bar\n" u"Baz: qux"
        headers = HTTPHeaders.parse(header_data)
        self.assertEqual(len(list(headers.get_all())), 2)
        self.assertEqual(headers.get("foo"), "bar")
        self.assertEqual(headers.get("baz"), "qux")