code: def read(self, ifile):
          
          name, value = None, None
  
          for line in ifile:
              if line == '\n':
                  break
              item = line.split(':', 1)
              if len(item) == 2:
                  # start of a new item
                  if name is not None:
                      self[name] = value[:-1]  # value sans trailing newline
                  name, value = item[0], urllib.parse.unquote(item[1])
              elif name is not None:
                  # continuation of the current item
                  value += urllib.parse.unquote(line)
  
          if name is not None: self[name] = value[:-1] if value[-1] == '\n' else value
docs: Reads an input header from an input file.
  
          The input header is read as a sequence of *<name>***:***<value>* pairs separated by a newline. The end of the
          input header is signalled by an empty line or an end-of-file.
  
          :param ifile: File-like object that supports iteration over lines.