parameters: (self)
return_statement: return True
docstring: 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.
docstring_summary: Parse a request (internal).
docstring_tokens: Parse a request ( internal ) .
function: 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
function_tokens: 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