2011-10-11 9 views
2

다양한 URL의 내용을 표시하는 간단한 프로그램을 작성하려고합니다. 내 코드는 이것입니다.Java URL 클래스 openStream throw java.net.ConnectException : 연결이 거부되었습니다 : 연결

import java.io.IOException; 
    import java.io.InputStream; 
    import java.net.*; 

    public class test { 
public static void main(String[] args) { 
    URL url; 
    //String site ="ftp://ftp.suse.com/"; 
    //String site ="http://www.google.ca"; 
    //String site = "ftp://ftp.gnu.org/README"; 
    String site = "ftp://metalab.unc.edu/"; 
    try { 
     url = new URL(site); 
     InputStream stream = url.openStream(); 
     for(int i = 0;i!= -1;i= stream.read()){ 
      System.out.print((char)i); 
     } 
     stream.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

}

처음 3 개 자원

  • 문자열 사이트 = "ftp://ftp.suse.com/"괜찮;
  • String site = "http://www.google.ca";
  • String site = "ftp://ftp.gnu.org/README";

하지만 마지막

  • 문자열 사이트 = "ftp://metalab.unc.edu/";

이 또한 나뿐만 아니라 시도 다양한 ftp 사이트에 발생하는 다음과 같은 오류를

java.net.ConnectException: Connection refused: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at sun.net.ftp.impl.FtpClient.openPassiveDataConnection(Unknown Source) 
at sun.net.ftp.impl.FtpClient.openDataConnection(Unknown Source) 
at sun.net.ftp.impl.FtpClient.list(Unknown Source) 
at sun.net.www.protocol.ftp.FtpURLConnection.getInputStream(Unknown Source) 
at java.net.URL.openStream(Unknown Source) 
at test.main(test.java:13) 

을 생산하고 있습니다. HTTP 사이트에 아무런 문제가 없었습니다. 이 문제를 해결하기 위해 내가 할 수있는 아이디어. 내 브라우저에서 접근 할 수있는 모든 지정된 리소스.

답변

4

사이트에서 브라우저가 아닌 사용자 에이전트를 거부 할 가능성이 있습니다. 당신은 사용자 에이전트 설정을 시도 할 수 있습니다 :

URL url; 
String site = "ftp://metalab.unc.edu/"; 
try { 
    url = new URL(site); 
    URLConnection urlc = url.openConnection(); 
    urlc.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110613 Firefox/6.0a2"); 
    InputStream stream = urlc.getInputStream(); 
    for(int i = 0;i!= -1;i= stream.read()){ 
     System.out.print((char)i); 
    } 
    stream.close(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

... 와이어 샤크를 설치하고 네트워크 수준에서 happenning되어이 땅에서 무엇을 참조 : // "Mozilla/5.0 (Windows NT 6.1, rv : 6.0) Gecko/20110814 Firefox/6.0" –

+0

@RyanStewart 감사합니다. – skyuzo

+0

이것은 나를 위해 작동하지 않았다. 나는 여전히 같은 오류가있다. 나는 몇몇 다른 머신에서 테스트를했고,'sun.net.ftp.FtpProtocolException : PORT : 500 불법 PORT 명령, EPSV ALL ALL at sun.net.ftp.FtpClient.openDataConnection (FtpClient. java : 435) at sun.net.ftp.FtpClient.list (FtpClient.java:624) at sun.net.www.protocol.ftp.FtpURLConnection.getInputStream (FtpURLConnection.java:373) at test.main test.java:17)' – train5potting

1

긴 촬영 : 당신이 액세스 할 수있는 당신이 그들의 프록시 서버를 사용하지 않는 네트워크 방화벽은 선택적으로 필터링하는 것이 될 수 있을까?

빠른 테스트 : 브라우저 설정을 변경하여 직접 연결 (자동 프록시 구성이나 프록시 사용 안함)을 사용하도록 설정하고 문제가되는 FTP 서버의 URL을 입력하고 작동하는지 확인하십시오.

그렇지 않은 경우 문제 일 수 있으므로 프록시를 지정할 수있는 라이브러리 (예 : HttpCore)를 사용해야합니다. 모든 다른 실패하면 당신은 [실제 사용자 에이전트 문자열 (HTTP를 사용하는 것이 좋습니다 제외

,

2
private static InputStream getStreamFromUrl(URL urlTemp) { 
     Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("http-pnproxy", 8080)); 
     URLConnection uc; 
     InputStream inputStream = null; 
     URL url = null; 
     try { 
      url = urlTemp; 
      uc = (URLConnection)url.openConnection(proxy); 
      uc.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110613 Firefox/6.0a2"); 
      uc.connect(); 
      inputStream = uc.getInputStream(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return inputStream; 
    } 
관련 문제