docs: def __request(self, url, params):
          """
          Make an HTTP POST request to the server and return JSON data. 
  
          :param url: HTTP URL to object.
  
          :returns: Response as dict. 
          """
          log.debug('request: %s %s' %(url, str(params)))
          try:
              response = urlopen(url, urlencode(params)).read()
              if params.get('action') != 'data':
                  log.debug('response: %s' % response)
              if params.get('action', None) == 'data':
                  return response
              else:
                  return json.loads(response)
          except TypeError, e:
              log.exception('request error')
              raise ServerError(e)
          except IOError, e:
              log.error('request error: %s' % str(e))
              raise ServerError(e)