def set_request(self, method=None, sub_url="", data=None, params=None,
                    proxies=None):
        """
        :param method: str of the method of the api_call
        :param sub_url: str of the url after the uri
        :param data: dict of form data to be sent with the request
        :param params: dict of additional data to be sent as the request args
        :param proxies: str of the proxie to use
        :return: None
        """
        self.method = method or self.method
        self.url = self.base_uri and (self.base_uri + sub_url) or sub_url
        self.params.update(params or {})
        self.proxies = proxies or self.proxies
        if self.params:
            self.url += '?' + '&'.join(
                ['%s=%s' % (k, v) for k, v in self.params.items()])
        self.request_data = deepcopy(data)
        self._timestamps['setup'] = time.time()
        if isinstance(data, dict) and 'content-type' not in self.headers:
            self.headers['content-type'] = 'application/json'
            self.json = data  # don't change this user.post
        else:
            self.data = data

        if self.accepted_return is not None:
            self.headers['Accept'] = \
                {'json': 'application/json', 'html': 'text/html'}[
                    self.accepted_return]

        self._stage = STAGE_SET