'Well, it is more common than expected that the user configures a target
which is offline, is not a web server, etc. So we\'re going to verify
all that before even starting our work, and provide a nice error message
so that users can change their config if needed.
Note that we send MAX_ERROR_COUNT tests to the remote end in order to
trigger any errors in the remote end and have the Extended URL Library
error handle return errors.
:raises: A friendly exception with lots of details of what could have
happen.'

def verify_target_server_up(self):

    sent_requests = 0
    msg = 'The    remote    web    server    is    not    answering    our    HTTP    requests,    multiple    errors    have    been    found    while    trying    to    GET    a    response    from    the    server.\n\nIn    most    cases    this    means    that    the    configured    target    is    incorrect,    the    port    is    closed,    there    is    a    firewall    blocking    our    packets    or    there    is    no    HTTP    daemon    listening    on    that    port.\n\nPlease    verify    your    target    configuration    and    try    again.    The    tested    targets    were:\n\n    %s\n'
    targets = cf.cf.get('targets')
    while (sent_requests < (MAX_ERROR_COUNT * 1.5)):
        for url in targets:
            try:
                self._w3af_core.uri_opener.GET(url, cache=False)
            except ScanMustStopByUserRequest:
                raise
            except Exception as e:
                dbg = 'Exception    found    during    verify_target_server_up:    "%s"'
                om.out.debug((dbg % e))
                target_list = '\n'.join((('    -    %s\n' % url) for url in targets))
                raise ScanMustStopException((msg % target_list))
            else:
                sent_requests += 1
