code: def h(self, *args, **kwargs):
          
          # If not arguments, print everything
          if len(args) + len(kwargs) == 0:
              print("Headers")
              for n in range(len(self.hkeys)):
                  print('  '+str(n)+': '+str(self.hkeys[n])+' = '+repr(self.h(n)))
              return
  
          # first loop over kwargs if there are any to set header elements
          for k in list(kwargs.keys()):
              self.insert_header(k, kwargs[k])
  
          # Meow search for a key if specified
          if len(args):
              # this can be shortened. Eventually, it'd be nice to get a tuple back!
              hkey = args[0]
  
              # if this is an index
              if type(hkey) in [int, int]: return self.headers[self.hkeys[hkey]]
  
              # if this is an exact match
              elif hkey in self.hkeys:      return self.headers[hkey]
  
              # Look for a fragment.
              else:
                  for k in self.hkeys:
                      if k.find(hkey) >= 0:
                          return self.headers[k]
                  print()
                  print("ERROR: Couldn't find '"+str(hkey) + "' in header.")
                  print("Possible values:")
                  for k in self.hkeys: print(k)
                  print()
                  return None
docs: This function searches through hkeys for one *containing* a key string
          supplied by args[0] and returns that header value.
  
          Also can take integers, returning the key'th header value.
  
          kwargs can be specified to set header elements.
          
          Finally, if called with no arguments or keyword arguments, this 
          simply prints the header information.