docs: def _get(self, action, show, proxy, timeout):
          """
          make HTTP request and cache response
          """
          silent = self.flags['silent']
  
          if action in self.cache:
              if action != 'imageinfo' and action != 'labels':
                  utils.stderr("+ %s results in cache" % action, silent)
                  return
          else:
              self.cache[action] = {}
  
          if self.flags.get('skip') and action in self.flags['skip']:
              if not self.flags['silent']:
                  utils.stderr("+ skipping %s" % action)
              return
  
          if 'requests' not in self.data:
              self.data['requests'] = []
  
          if len(self.data['requests']) >= self.REQUEST_LIMIT:
              raise StopIteration("Hit REQUEST_LIMIT = %d" % self.REQUEST_LIMIT)
  
          if self.data['requests'] and self.REQUEST_DELAY:
              utils.stderr("REQUEST_DELAY = %d seconds" % self.REQUEST_DELAY)
              sleep(self.REQUEST_DELAY)
  
          # make the request
          qobj = WPToolsQuery(lang=self.params['lang'],
                              variant=self.params.get('variant'),
                              wiki=self.params.get('wiki'),
                              endpoint=self.params.get('endpoint'))
          qstr = self._query(action, qobj)
          req = self._request(proxy, timeout)
          response = req.get(qstr, qobj.status)
  
          self.cache[action]['query'] = qstr
          self.cache[action]['response'] = response
          self.cache[action]['info'] = req.info
  
          self.data['requests'].append(action)
  
          self._set_data(action)
  
          if show and not self.flags.get('silent'):
              self.show()