code: def request(self, url, method=None, data=None, headers=None, parser=None): 
          
          assert self.access_token is not None
          parser = parser or loads 
  
          if not method:
              method = 'GET' if not data else 'POST'
  
          req = self.token_transport('{0}{1}'.format(self.resource_endpoint, 
              url), self.access_token, data=data, method=method, headers=headers)
  
          resp = urlopen(req)
          data = resp.read()
          try:
              return parser(data.decode(resp.info().get_content_charset() or
                  'utf-8'))
              # try to decode it first using either the content charset, falling
              # back to utf-8
  
          except UnicodeDecodeError:
              # if we've gotten a decoder error, the calling code better know how
              # to deal with it. some providers (i.e. stackexchange) like to gzip
              # their responses, so this allows the client code to handle it
              # directly.
              return parser(data)
docs: Request user data from the resource endpoint
          :param url: The path to the resource and querystring if required
          :param method: HTTP method. Defaults to ``GET`` unless data is not None
                         in which case it defaults to ``POST``
          :param data: Data to be POSTed to the resource endpoint
          :param parser: Parser callback to deal with the returned data. Defaults
                         to ``json.loads`.`