protected boolean sendRequest(String name) {
        try {
            address.delete(0, address.length());
            address.append(Mirrors.getMirror());
            address.append(API_URL);
            address.append(name);
            address.append(paramsBuf);
            if (isLimit && isIgnoreInvalid) {
                address.append("?");
                address.append(limitString);
                address.append("&");
                address.append(ignoreInvalid);
            } else if (isLimit) {
                address.append("?");
                address.append(limitString);
            } else if (isIgnoreInvalid) {
                address.append("?");
                address.append(ignoreInvalid);
            }
            URL url = new URL(address.toString());
            URLConnection connection = url.openConnection();
            connection.setRequestProperty("User-Agent", clientName);
            connection.setConnectTimeout(connectTimeoutMillis);
            connection.setReadTimeout(readTimeoutMillis);
            rootNode = null;
            it = null;
            localTimestamp = 0;
            success = false;
            try {
                rootNode = mapper.readTree(connection.getInputStream());
            } catch (IOException e) {
                String proxyUrl = ProxyHook.getProxyUrl(address.toString());
                rootNode = mapper.readTree(ProxyHook.loadContent(proxyUrl));
            }
            if (!rootNode.path("success").toString().equals("0")) {
                it = rootNode.fieldNames();
                if (it != null) {
                    localTimestamp = System.currentTimeMillis();
                    success = true;
                    return true;
                }
            } else if (getErrorMessage().length() != 0) {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        makeDefaultRootNode();
        return false;
    }