':param url: the target url
:param headers: a :class dict include some fields for request header.
:param params: a instance of Params, includ extra params
:return: A instance of Output'

def execute(self, target, headers=None, params=None, mode='verify', verbose=True):

    self.target = target
    self.url = parseTargetUrl(target)
    self.headers = headers
    self.params = (strToDict(params) if params else {})
    self.mode = mode
    self.verbose = verbose
    self.expt = (0, 'None')
    output = None
    try:
        if (self.mode == 'attack'):
            output = self._attack()
        else:
            output = self._verify()
    except NotImplementedError as e:
        self.expt = (ERROR_TYPE_ID.NOTIMPLEMENTEDERROR, e)
        logger.log(CUSTOM_LOGGING.ERROR, ('POC:    %s    not    defined    %s    mode' % (self.name, self.mode)))
        output = Output(self)
    except ConnectTimeout as e:
        self.expt = (ERROR_TYPE_ID.CONNECTTIMEOUT, e)
        while (conf.retry > 0):
            logger.log(CUSTOM_LOGGING.WARNING, ('POC:    %s    timeout,    start    it    over.' % self.name))
            try:
                if (self.mode == 'attack'):
                    output = self._attack()
                else:
                    output = self._verify()
                break
            except ConnectTimeout:
                logger.log(CUSTOM_LOGGING.ERROR, ('POC:    %s    time-out    retry    failed!' % self.name))
                output = Output(self)
            conf.retry -= 1
        else:
            logger.log(CUSTOM_LOGGING.ERROR, str(e))
            output = Output(self)
    except HTTPError as e:
        self.expt = (ERROR_TYPE_ID.HTTPERROR, e)
        logger.log(CUSTOM_LOGGING.WARNING, ('POC:    %s    HTTPError    occurs,    start    it    over.' % self.name))
        output = Output(self)
    except ConnectionError as e:
        self.expt = (ERROR_TYPE_ID.CONNECTIONERROR, e)
        logger.log(CUSTOM_LOGGING.ERROR, str(e))
        output = Output(self)
    except TooManyRedirects as e:
        self.expt = (ERROR_TYPE_ID.TOOMANYREDIRECTS, e)
        logger.log(CUSTOM_LOGGING.ERROR, str(e))
        output = Output(self)
    except Exception as e:
        self.expt = (ERROR_TYPE_ID.OTHER, e)
        logger.log(CUSTOM_LOGGING.ERROR, str(e))
        output = Output(self)
    return output
