(self)
return True
Parse a request (internal).

        The request should be stored in self.raw_requestline; the results
        are in self.command, self.path, self.request_version and
        self.headers.

        Return True for success, False for failure; on failure, an
        error is sent back.
Parse a request (internal).
Parse a request ( internal ) .
def parse_request(self):
        """Parse a request (internal).

        The request should be stored in self.raw_requestline; the results
        are in self.command, self.path, self.request_version and
        self.headers.

        Return True for success, False for failure; on failure, an
        error is sent back.

        """
        self.command = None  # set in case of error on the first line
        self.request_version = version = self.default_request_version
        self.close_connection = 1
        requestline = self.raw_requestline
        requestline = requestline.rstrip('\r\n')
        self.requestline = requestline
        words = requestline.split()
        if len(words) == 3:
            command, path, version = words
            if version[:5] != 'HTTP/':
                self.send_error(400, "Bad request version (%r)" % version)
                return False
            try:
                base_version_number = version.split('/', 1)[1]
                version_number = base_version_number.split(".")
                # RFC 2145 section 3.1 says there can be only one "." and
                #   - major and minor numbers MUST be treated as
                #      separate integers;
                #   - HTTP/2.4 is a lower version than HTTP/2.13, which in
                #      turn is lower than HTTP/12.3;
                #   - Leading zeros MUST be ignored by recipients.
                if len(version_number) != 2:
                    raise ValueError
                version_number = int(version_number[0]), int(version_number[1])
            except (ValueError, IndexError):
                self.send_error(400, "Bad request version (%r)" % version)
                return False
            if version_number >= (1, 1) and self.protocol_version >= "HTTP/1.1":
                self.close_connection = 0
            if version_number >= (2, 0):
                self.send_error(505,
                          "Invalid HTTP Version (%s)" % base_version_number)
                return False
        elif len(words) == 2:
            command, path = words
            self.close_connection = 1
            if command != 'GET':
                self.send_error(400,
                                "Bad HTTP/0.9 request type (%r)" % command)
                return False
        elif not words:
            return False
        else:
            self.send_error(400, "Bad request syntax (%r)" % requestline)
            return False
        self.command, self.path, self.request_version = command, path, version

        # Examine the headers and look for a Connection directive
        self.headers = self.MessageClass(self.rfile, 0)

        conntype = self.headers.get('Connection', "")
        if conntype.lower() == 'close':
            self.close_connection = 1
        elif (conntype.lower() == 'keep-alive' and
              self.protocol_version >= "HTTP/1.1"):
            self.close_connection = 0
        return True
def parse_request ( self ) : self . command = None # set in case of error on the first line self . request_version = version = self . default_request_version self . close_connection = 1 requestline = self . raw_requestline requestline = requestline . rstrip ( '\r\n' ) self . requestline = requestline words = requestline . split ( ) if len ( words ) == 3 : command , path , version = words if version [ : 5 ] != 'HTTP/' : self . send_error ( 400 , "Bad request version (%r)" % version ) return False try : base_version_number = version . split ( '/' , 1 ) [ 1 ] version_number = base_version_number . split ( "." ) # RFC 2145 section 3.1 says there can be only one "." and #   - major and minor numbers MUST be treated as #      separate integers; #   - HTTP/2.4 is a lower version than HTTP/2.13, which in #      turn is lower than HTTP/12.3; #   - Leading zeros MUST be ignored by recipients. if len ( version_number ) != 2 : raise ValueError version_number = int ( version_number [ 0 ] ) , int ( version_number [ 1 ] ) except ( ValueError , IndexError ) : self . send_error ( 400 , "Bad request version (%r)" % version ) return False if version_number >= ( 1 , 1 ) and self . protocol_version >= "HTTP/1.1" : self . close_connection = 0 if version_number >= ( 2 , 0 ) : self . send_error ( 505 , "Invalid HTTP Version (%s)" % base_version_number ) return False elif len ( words ) == 2 : command , path = words self . close_connection = 1 if command != 'GET' : self . send_error ( 400 , "Bad HTTP/0.9 request type (%r)" % command ) return False elif not words : return False else : self . send_error ( 400 , "Bad request syntax (%r)" % requestline ) return False self . command , self . path , self . request_version = command , path , version # Examine the headers and look for a Connection directive self . headers = self . MessageClass ( self . rfile , 0 ) conntype = self . headers . get ( 'Connection' , "" ) if conntype . lower ( ) == 'close' : self . close_connection = 1 elif ( conntype . lower ( ) == 'keep-alive' and self . protocol_version >= "HTTP/1.1" ) : self . close_connection = 0 return True