2017-12-13 42 views
1

HtmlUnit 2.11을 사용하여 웹 사이트에서 파일을 다운로드하려고합니다. 그러나 UnknownHostException이 발생합니다. 아래 코드와 전체 스택 추적은 다음과 같습니다스레드 "main"의 예외 java.net.UnknownHostException

코드 :

final WebClient webClient = new WebClient(
       BrowserVersion.INTERNET_EXPLORER_8); 

     URL Url = new URL("https://340bopais.hrsa.gov/reports"); 

     HtmlPage page = webClient.getPage(Url); 
     HtmlSubmitInput button = page 
       .getElementByName("ContentPlaceHolder1_lnkCEDailyReport"); 

     final HtmlPage page2 = button.click(); 

예외 추적 :

Exception in thread "main" java.net.UnknownHostException: 340bopais.hrsa.gov 
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) 
    at java.net.InetAddress$1.lookupAllHostAddr(Unknown Source) 
    at java.net.InetAddress.getAddressesFromNameService(Unknown Source) 
    at java.net.InetAddress.getAllByName0(Unknown Source) 
    at java.net.InetAddress.getAllByName(Unknown Source) 
    at java.net.InetAddress.getAllByName(Unknown Source) 
    at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45) 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:278) 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:162) 
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294) 
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) 
    at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:171) 
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1484) 
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1402) 
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:304) 
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:373) 
    at src.main.java.DataDownloader.main(DataDownloader.java:30) 
+2

당신이 당신의 명령 프롬프트에서 해당 URL을 핑 (ping) 할 수 있습니까 :

이이 문제를 해결할 수 있습니다 시도

? –

+0

URL의 IP 주소를 확인할 수 없습니다 :'https : // 340bopais.hrsa.gov/reports' –

+0

@khAn, 다음 명령을 시도했습니다 : ping 340bopais.hrsa.gov. 응답 : Ping 요청에서 호스트 340bopais.hrsa.gov를 찾을 수 없습니다. 이름을 확인하고 다시 시도하십시오. 또한 "tracert 340bopais.hrsa.gov"결과에 다음과 같은 결과가 나타납니다. 대상 시스템 이름 340bopais.hrsa.gov를 확인할 수 없습니다. –

답변

1

PING (패킷 인터넷 Groper의 약어)는 ICMP (인터넷 제어 관리 프로토콜) 프로토콜입니다 .

HTTPS는 전송 프로토콜입니다.

많은 네트워크 제공 업체 및 서비스 관리자는 필요한 프로토콜과 포트에 대해서만 리소스에 대한 액세스를 제한합니다.

340bopais.hrsa.gov를 호스팅하는 조직은 포트 80 및 443에서 해당 서버로의 TCP 트래픽 만 허용하도록 방화벽 및 기타 네트워크 인프라를 구성했을 가능성이 큽니다.


업데이트 :

나는 성공적으로 자바를 사용하여 파일 및 셀레늄을 다운로드했습니다. 전체 코드를 repository으로 만들었고 코드를 다운로드 할 수 있습니다. 그러나 여기에서 나는 그것을 작동하는 방법에 대해 설명합니다

  1. resource 폴더

  2. 다운로드 thischrome.exedriver라는 폴더를 추가 Maven 프로젝트를 확인하기 위해 Eclipse를 사용하여 드라이버를 찾아서 드라이버 폴더에 넣으십시오.

  3. pom.xml에이 종속성을 추가

    <dependency> 
         <groupId>org.seleniumhq.selenium</groupId> 
         <artifactId>selenium-java</artifactId> 
         <version>3.4.0</version> 
        </dependency> 
    
  4. 을 주요 방법 타입으로 :

    공공 정적 무효 메인 (문자열 []에 args) {

     File file = new 
             File(StackApplication.class.getClassLoader().getResource("driver/chromedriver.exe").getFile()); 
          String driverPath=file.getAbsolutePath(); 
          System.out.println("Webdriver is in path: "+driverPath); 
          System.setProperty("webdriver.chrome.driver",driverPath); 
    
          WebDriver driver=new ChromeDriver(); 
          driver.navigate().to("https://340bopais.hrsa.gov/reports"); 
          driver.findElement(By.xpath("//*[@id=\"headingTwo\"]/h4/a")).click(); 
          driver.findElement(By.xpath("//*[@id=\"ContentPlaceHolder1_lnkCEDailyReport\"]")).click(); 
    
    
    
        } 
    

그리고 그것은 매력처럼 작동합니다

+0

다음 부분은 @Salman입니다. 코드는 웹 사이트 자체에 연결할 수 없습니다. –

+0

안녕하세요 @ 샐먼, 자바를 사용하여이 웹 사이트에 어떻게 연결해야합니까? –

+0

은'셀레늄'이고'자바 '는 수용 가능한 대답인가? – Salman

0

이 웹 사이트 보안 인증서에 문제가 있다고 생각합니다. 브라우저에서 URL https://340bopais.hrsa.gov/reports을 실행하려고했습니다.

기본적으로 URL 클래스를 사용하여 HTTPS URL에 액세스하면 서버의 인증서 체인을 확인할 수없는 경우 예외가 트러스트 스토어에 이전에 설치되지 않은 것입니다. 테스트 목적으로 인증서의 유효성을 사용하지 않으려면 기본 신뢰 관리자를 모든 인증서를 신뢰하는 관리자로 대체해야합니다.

// Create a trust manager that does not validate certificate chains 
TrustManager[] trustAllCerts = new TrustManager[]{ 
new X509TrustManager() { 
    public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
     return null; 
    } 
    public void checkClientTrusted(
     java.security.cert.X509Certificate[] certs, String authType) { 
    } 
    public void checkServerTrusted(
     java.security.cert.X509Certificate[] certs, String authType) { 
    } 
} 
}; 

// Install the all-trusting trust manager 
try { 
    SSLContext sc = SSLContext.getInstance("SSL"); 
    sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
    } catch (Exception e) { 
} 

// Now you can access an https URL without having the certificate in the truststore 
try { 
    URL url = new URL("https://yourwebsite/example.html"); 
} catch (MalformedURLException e) { 
} 
+0

Thanks @Amol Raje, 웹 사이트의 SSL 인증서를 Java 키 저장소에 추가했습니다. 그래도 나는 내일 당신의 해결책을 시도하고 볼 것입니다. –

+0

Hello @Amol Raje, 코드를 사용했습니다. 그러나 동일한 예외가 발생합니다. –

+0

ok .. 코드를 제거하고'https : // 340bopais.hrsa.gov' 만 확인하십시오 –