2013-04-12 8 views
1

웹 크롤러를 구축 중입니다. Having read this DNS 해상도가 느려서 DNS 확인자를 분리해야한다는 것을 알고 있습니다.Java : IP가있는 URL 열기

그래서 당신이 문자열 URLString는이 http://google.com 당신은 당신이 실제 웹 사이트 자체를 다운로드 어떻게

URL url = new URL(urlString) 
InetAddress ip = InetAddress.getByName(url.getHost()); 

그러나 다음을 수행하여 IP로 그 변환 할 수있는 말? URL을

, 우리는 할 수 같은 단지 다우 뭔가 :

String htmlDocumentString = new Scanner(new url.openStream(), "UTF-8").useDelimiter("\\A").next(); 

그러나 우리가 해결 된 IP를 사용하려는 경우, 우리가 수동으로 IP와 URL을 재구성해야합니까? url.setHost() 방법이 없으며 그냥 지저분 해 보입니다. URL에서 읽기

+1

"DNS 확인자를 구분 하시겠습니까?" 나는 그 요점을 이해하지 못한다. 예, DNS 해상도로 인해 오버 헤드가 발생하지만 "분리하는 방법"이 웹 크롤러를 더 빠르게 만드는 이유는 없습니다. –

+1

URL 콘텐츠를로드 할 때 많은 서버가 VirtualHost를 도메인에 의존하기 때문에 가장 간단한 방법은 로컬 DNS 캐시를 사용하는 것입니다. 직접 IP를 요청하면 적합한 컨텐츠를 보유 할 수 없습니다. –

답변

0

:

public class URLReader { 
public static void main(String[] args) throws Exception { 

    URL oracle = new URL("http://www.oracle.com/"); 
    BufferedReader in = new BufferedReader(
    new InputStreamReader(oracle.openStream())); 

    String inputLine; 
    while ((inputLine = in.readLine()) != null) 
     System.out.println(inputLine); 
    in.close(); 
} 

가에서 촬영 아파치 코 몬즈에서 IOUtils를 사용하여 ...

URL oracle = new URL("http://www.oracle.com/"); 
    URLConnection urlc = oracle.openConnection(); 
    urlc.setDoInput(true); 
    urlc.setRequestProperty("Accept", "text/text"); 
    InputStream inputStream = urlc.getInputStream(); 
    String myString = IOUtils.toString(inputStream, "UTF-8"); 

을 위 :

http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#toString(java.io.InputStream,%20java.lang.String)