Example usage for org.apache.commons.net.whois WhoisClient getInputStream

List of usage examples for org.apache.commons.net.whois WhoisClient getInputStream

Introduction

In this page you can find the example usage for org.apache.commons.net.whois WhoisClient getInputStream.

Prototype

public InputStream getInputStream(String handle) throws IOException 

Source Link

Document

Queries the connected whois server for information regarding the given handle and returns the InputStream of the network connection.

Usage

From source file:net.spfbl.core.Server.java

/**
 * Consulta de identificao no WHOIS.// w w w  .java 2s  .  co m
 * Controla a taxa de 30 consultas no intervalo de 24 horas.
 * @param query a consulta a ser realizada.
 * @param server o servidor que contm a informao.
 * @return o resultado do WHOIS para a consulta.
 * @throws ProcessException se houver falha no processamento da informao.
 */
public static String whoisID(String query, String server) throws ProcessException {
    long time = System.currentTimeMillis();
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    try {
        if (WHOIS_CONNECTION_SEMAPHORE.tryAcquire()) {
            try {
                acquireWhoisIDQuery();
                WhoisClient whoisClient = new WhoisClient();
                try {
                    whoisClient.setDefaultTimeout(3000);
                    whoisClient.connect(server);
                    InputStream inputStream = whoisClient.getInputStream(query);
                    int code;
                    while ((code = inputStream.read()) != -1) {
                        outputStream.write(code);
                    }
                } finally {
                    whoisClient.disconnect();
                }
            } finally {
                WHOIS_CONNECTION_SEMAPHORE.release();
            }
        } else {
            throw new ProcessException("ERROR: TOO MANY CONNECTIONS");
        }
    } catch (ProcessException ex) {
        throw ex;
    } catch (Exception ex) {
        throw new ProcessException("ERROR: WHOIS CONNECTION FAIL", ex);
    }
    try {
        String result = outputStream.toString("ISO-8859-1");
        logWhois(time, server, query, result);
        return result;
    } catch (UnsupportedEncodingException ex) {
        throw new ProcessException("ERROR: ENCODING", ex);
    }
}

From source file:net.spfbl.core.Server.java

/**
 * Consulta comum no WHOIS./* w  w  w .j  a va2s  .  co  m*/
 * Controla a taxa de 30 consultas no intervalo de 5 minutos.
 * @param query a consulta a ser realizada.
 * @param server o servidor que contm a informao.
 * @return o resultado do WHOIS para a consulta.
 * @throws ProcessException se houver falha no processamento da informao.
 */
public static String whois(String query, String server) throws ProcessException {
    long time = System.currentTimeMillis();
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    try {
        if (WHOIS_CONNECTION_SEMAPHORE.tryAcquire()) {
            try {
                acquireWhoisQuery();
                WhoisClient whoisClient = new WhoisClient();
                try {
                    whoisClient.setDefaultTimeout(3000);
                    whoisClient.connect(server);
                    InputStream inputStream = whoisClient.getInputStream(query);
                    try {
                        int code;
                        while ((code = inputStream.read()) != -1) {
                            outputStream.write(code);
                        }
                    } finally {
                        inputStream.close();
                    }
                } finally {
                    whoisClient.disconnect();
                }
            } finally {
                WHOIS_CONNECTION_SEMAPHORE.release();
            }
        } else {
            throw new ProcessException("ERROR: TOO MANY CONNECTIONS");
        }
    } catch (ProcessException ex) {
        throw ex;
    } catch (Exception ex) {
        throw new ProcessException("ERROR: WHOIS CONNECTION FAIL", ex);
    }
    try {
        String result = outputStream.toString("ISO-8859-1");
        result = result.replace("\r", "");
        logWhois(time, server, query, result);
        return result;
    } catch (UnsupportedEncodingException ex) {
        throw new ProcessException("ERROR: ENCODING", ex);
    }
}

From source file:org.archive.modules.fetcher.FetchWhois.java

protected void fetch(CrawlURI curi, String whoisServer, String whoisQuery) {
    WhoisClient client = new WhoisClient();
    Recorder recorder = curi.getRecorder();

    try {/*from  w w  w  .j av  a2s.  com*/
        client.setConnectTimeout(getSoTimeoutMs());
        client.setDefaultTimeout(getSoTimeoutMs());

        if (curi.getUURI().getPort() > 0) {
            client.connect(whoisServer, curi.getUURI().getPort());
        } else {
            client.connect(whoisServer);
        }

        client.setSoTimeout(getSoTimeoutMs()); // must be after connect()

        curi.getData().put(CoreAttributeConstants.A_WHOIS_SERVER_IP,
                client.getRemoteAddress().getHostAddress());

        recorder.inputWrap(client.getInputStream(whoisQuery));

        // look for info about whois server in the response
        // XXX run regex on the whole thing, rather than line by line?
        BufferedReader reader = new BufferedReader(new InputStreamReader(recorder.getRecordedInput(), "ASCII"));
        for (String line = reader.readLine(); line != null; line = reader.readLine()) {
            Matcher matcher = TextUtils.getMatcher(WHOIS_SERVER_REGEX, line);
            if (matcher.find()) {
                // gets rid of "domain " for whois.verisign-grs.com queries
                String key = whoisQuery.replaceFirst("(\\S+\\s+)+", "").toLowerCase();
                referralServers.put(key, matcher.group(1).toLowerCase());
                if (logger.isLoggable(Level.FINE)) {
                    logger.fine("added referral server " + matcher.group(1) + " to server list for " + key);
                }
            }
        }

        curi.setContentType("text/plain");
        curi.setFetchStatus(S_WHOIS_SUCCESS);
    } catch (IOException e) {
        if (logger.isLoggable(Level.FINE)) {
            logger.fine("failed to connect to whois server for uri " + curi + ": " + e);
        }
        curi.getNonFatalFailures().add(e);
        curi.setFetchStatus(S_CONNECT_FAILED);
    } finally {
        recorder.close();
        curi.setContentSize(recorder.getRecordedInput().getSize());
        logger.fine(curi + ": " + recorder.getRecordedInput().getSize() + " bytes read");

        if (client != null && client.isConnected())
            try {
                client.disconnect();
            } catch (IOException e) {
                logger.fine("problem closing connection to whois server for uri " + curi + ": " + e);
            }

        urlProgress.put(curi.toString(), UrlStatus.DONE.ordinal());
    }
}