2011-10-11 41 views
2

私はさまざまなURLの内容を表示する簡単なプログラムを作成しようとしています。私のコードはこれです。Java URLクラスopenStream投げ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/" 大丈夫です。
  • 文字列site = "http://www.google.ca";
  • 文字列site = "ftp://ftp.gnu.org/README";

が、最後の1つの

  • 文字列のサイト= "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

... wiresharkのをインストールし、ネットワークレベルでhappenningされ、地球上のものを参照してください:// Mozilla/5.0(Windows NT 6.1; rv:6.0)Gecko/20110814 Firefox/6.0 " –

+0

@RyanStewartありがとう、編集されました。 – skyuzo

+0

これは私のために働かなかった、私はまだ同じエラーを持っています。私はいくつかの異なるマシンでテストし、そのうちの1つでこのエラーが発生しました。 'sun.net.ftp.FtpProtocolException:PORT:500不正なPORTコマンド、実際にはEPSV 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; 
    } 
関連する問題