'Based on a URL, request something that we know is going to be a 404.
Afterwards analyze the 404\'s and summarise them.
:return: A list with 404 bodies.'

def generate_404_knowledge(self, url):

    if (self._uri_opener is None):
        msg = '404    fingerprint    database    was    incorrectly    initialized.    URL    opener    is    None.'
        raise RuntimeError(msg)
    extension = url.get_extension()
    domain_path = url.get_domain_path()
    handlers = {'py', 'php', 'asp', 'aspx', 'do', 'jsp', 'rb', 'action', 'gif', 'htm', 'pl', 'cgi', 'xhtml', 'htmls', 'foobar'}
    if extension:
        handlers.add(extension)
    test_urls = []
    for extension in handlers:
        rand_alnum_file = ((rand_alnum(8) + '.') + extension)
        url404 = domain_path.url_join(rand_alnum_file)
        test_urls.append(url404)
    imap_unordered = self._worker_pool.imap_unordered
    not_exist_resp_lst = []
    for not_exist_resp in imap_unordered(self._send_404, test_urls):
        four_oh_data = FourOhFourResponseFactory(not_exist_resp)
        not_exist_resp_lst.append(four_oh_data)
    if len(not_exist_resp_lst):
        four_oh_data = not_exist_resp_lst[0]
        self._404_responses.append(four_oh_data)
    for i in not_exist_resp_lst:
        for j in self._404_responses:
            if (i is j):
                continue
            if fuzzy_equal(i.body, j.body, IS_EQUAL_RATIO):
                break
        else:
            self._404_responses.append(i)
    msg_fmt = 'The    404    body    result    database    has    a    length    of    %s.'
    om.out.debug((msg_fmt % len(self._404_responses)))
