Esempio n. 1
0
    def test_garbage_in(self):
        # Connect without SSL regardless of server.scheme

        c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
        c._output(b'gjkgjklsgjklsgjkljklsg')
        c._send_output()
        response = c.response_class(c.sock, method='GET')
        try:
            response.begin()
            self.assertEqual(response.status, HTTP_BAD_REQUEST)
            self.assertEqual(response.fp.read(22), b'Malformed Request-Line')
            c.close()
        except socket.error as ex:
            # "Connection reset by peer" is also acceptable.
            if ex.errno != errno.ECONNRESET:
                raise
Esempio n. 2
0
 def test_garbage_in(self):
     # Connect without SSL regardless of server.scheme
     c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c._output(ntob('gjkgjklsgjklsgjkljklsg'))
     c._send_output()
     response = c.response_class(c.sock, method="GET")
     try:
         response.begin()
         self.assertEqual(response.status, 400)
         self.assertEqual(response.fp.read(22),
                          ntob("Malformed Request-Line"))
         c.close()
     except socket.error:
         e = sys.exc_info()[1]
         # "Connection reset by peer" is also acceptable.
         if e.errno != errno.ECONNRESET:
             raise
Esempio n. 3
0
    def test_http_to_https(self):
        # Test what happens when a client tries to speak HTTP to an HTTPS server
        msg = ("The client sent a plain HTTP request, but this "
               "server only speaks HTTPS on this port.")

        c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
        c.putrequest("GET", "/hello")
        c.endheaders()
        try:
            response = c.getresponse()
        except socket.error:
            pass
        else:
            self.status, self.headers, self.body = webtest.shb(response)
            c.close()
            self.assertStatus(400)
            self.assertBody(msg)
        self.assertInLog(msg)
Esempio n. 4
0
 def test_content_length_required(self):
     # Now send a message that has no Content-Length, but does send a body.
     # Verify that CP times out the socket and responds
     # with 411 Length Required.
     if self.scheme == "https":
         c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c.request("POST", "/body_required")
     response = c.getresponse()
     self.body = response.fp.read()
     self.status = str(response.status)
     self.assertStatus(411)
Esempio n. 5
0
 def test_garbage_in(self):
     # Connect without SSL regardless of server.scheme
     c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c._output(ntob('gjkgjklsgjklsgjkljklsg'))
     c._send_output()
     response = c.response_class(c.sock, method="GET")
     try:
         response.begin()
         self.assertEqual(response.status, 400)
         self.assertEqual(response.fp.read(22), ntob("Malformed Request-Line"))
         c.close()
     except socket.error:
         e = sys.exc_info()[1]
         # "Connection reset by peer" is also acceptable.
         if e.errno != errno.ECONNRESET:
             raise
Esempio n. 6
0
 def test_chunked_request_payload_readline(self):
     if self.scheme == "https":
         c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c.putrequest("POST", "/echo_lines")
     c.putheader("Transfer-Encoding", "chunked")
     c.endheaders()
     c.send(ntob("13\r\nI am a\nrequest body\r\n0\r\n\r\n"))
     response = c.getresponse()
     self.status, self.headers, self.body = webtest.shb(response)
     c.close()
     self.assertStatus(200)
     self.assertBody("I am a\nrequest body")
Esempio n. 7
0
    def test_http_over_https(self):
        if self.scheme != 'https':
            return self.skip('skipped (not running HTTPS)... ')

        # Try connecting without SSL.
        conn = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
        conn.putrequest('GET', '/', skip_host=True)
        conn.putheader('Host', self.HOST)
        conn.endheaders()
        response = conn.response_class(conn.sock, method='GET')
        try:
            response.begin()
            self.assertEqual(response.status, 400)
            self.body = response.read()
            self.assertBody('The client sent a plain HTTP request, but this '
                            'server only speaks HTTPS on this port.')
        except socket.error as ex:
            # "Connection reset by peer" is also acceptable.
            if ex.errno != errno.ECONNRESET:
                raise
Esempio n. 8
0
 def test_request_payload_readline(self):
     if self.scheme == "https":
         c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c.putrequest("POST", "/echo_lines")
     body = ntob("I am a\nrequest body")
     c.putheader("Content-Length", len(body))
     c.endheaders()
     c.send(body)
     response = c.getresponse()
     self.status, self.headers, self.body = webtest.shb(response)
     c.close()
     self.assertStatus(200)
     self.assertBody(body)
Esempio n. 9
0
 def test_no_content_length(self):
     # "The presence of a message-body in a request is signaled by the
     # inclusion of a Content-Length or Transfer-Encoding header field in
     # the request's message-headers."
     #
     # Send a message with neither header and no body.
     if self.scheme == 'https':
         c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c.request('POST', '/no_body')
     response = c.getresponse()
     self.body = response.fp.read()
     self.status = str(response.status)
     self.assertStatus(200)
     self.assertBody(b'Hello world!')
Esempio n. 10
0
    def test_malformed_header(self):
        if self.scheme == 'https':
            c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
        else:
            c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
        c.putrequest('GET', '/')
        c.putheader('Content-Type', 'text/plain')
        # See http://www.cherrypy.org/ticket/941
        c._output(ntob('Re, 1.2.3.4#015#012'))
        c.endheaders()

        response = c.getresponse()
        self.status = str(response.status)
        self.assertStatus(400)
        self.body = response.fp.read(20)
        self.assertBody("Illegal header line.")
Esempio n. 11
0
 def test_max_body(self):
     if self.scheme == "https":
         c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c.putrequest("POST", "/echo")
     body = ntob("x" * 1001)
     c.putheader("Content-Length", len(body))
     c.endheaders()
     c.send(body)
     response = c.getresponse()
     self.status, self.headers, self.body = webtest.shb(response)
     c.close()
     self.assertStatus(413)
     self.assertBody("The entity sent with the request exceeds "
                     "the maximum allowed bytes.")
Esempio n. 12
0
    def test_http_to_https(self):
        # Test what happens when a client tries to speak HTTP to an HTTPS server
        msg = ("The client sent a plain HTTP request, but this "
               "server only speaks HTTPS on this port.")

        c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
        c.putrequest("GET", "/hello")
        c.endheaders()
        try:
            response = c.getresponse()
        except socket.error:
            pass
        else:
            self.status, self.headers, self.body = webtest.shb(response)
            c.close()
            self.assertStatus(400)
            self.assertBody(msg)
        self.assertInLog(msg)
Esempio n. 13
0
 def test_malformed_request_line(self):
     # Test missing version in Request-Line
     if self.scheme == 'https':
         c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))
     c._output(ntob('GET /'))
     c._send_output()
     if hasattr(c, 'strict'):
         response = c.response_class(c.sock, strict=c.strict, method='GET')
     else:
         # Python 3.2 removed the 'strict' feature, saying:
         # "http.client now always assumes HTTP/1.x compliant servers."
         response = c.response_class(c.sock, method='GET')
     response.begin()
     self.assertEqual(response.status, 400)
     self.assertEqual(response.fp.read(22), ntob("Malformed Request-Line"))
     c.close()
Esempio n. 14
0
    def test_no_content_length(self):
        # "The presence of a message-body in a request is signaled by the
        # inclusion of a Content-Length or Transfer-Encoding header field in
        # the request's message-headers."
        #
        # Send a message with neither header and no body. Even though
        # the request is of method POST, this should be OK because we set
        # request.process_request_body to False for our handler.
        c = self.make_connection()
        c.request('POST', '/no_body')
        response = c.getresponse()
        self.body = response.fp.read()
        self.status = str(response.status)
        self.assertStatus(200)
        self.assertBody(ntob('Hello world!'))

        # Now send a message that has no Content-Length, but does send a body.
        # Verify that CP times out the socket and responds
        # with 411 Length Required.
        if self.scheme == 'https':
            c = HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
        else:
            c = HTTPConnection('%s:%s' % (self.interface(), self.PORT))

        # `_get_content_length` is needed for Python 3.6+
        with mock.patch.object(c,
                               '_get_content_length',
                               lambda body, method: None,
                               create=True):
            # `_set_content_length` is needed for Python 2.7-3.5
            with mock.patch.object(c, '_set_content_length', create=True):
                c.request('POST', '/')

        response = c.getresponse()
        self.body = response.fp.read()
        self.status = str(response.status)
        self.assertStatus(411)
Esempio n. 15
0
 def __init__(self, path=None):
     self.path = path
     HTTPConnection.__init__(self, host="localhost", port=80)
Esempio n. 16
0
 def make_connection(self):
     if self.scheme == 'https':
         return HTTPSConnection('%s:%s' % (self.interface(), self.PORT))
     else:
         return HTTPConnection('%s:%s' % (self.interface(), self.PORT))
Esempio n. 17
0
 def __init__(self, path=None):
     self.path = path
     HTTPConnection.__init__(self, host="localhost", port=80)