2011-10-11 660 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/」;
  • String site =「http://www.google.ca」;
  • String site =「ftp://ftp.gnu.org/README」;

但最後一個

  • 字符串網站= 「ftp://metalab.unc.edu/」;

產生以下錯誤

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) 

這也恰好與我曾嘗試以及其他各種FTP站點。 HTTP網站沒有任何問題。任何想法我可以做什麼來解決這個問題。我可以通過瀏覽器訪問的所有指定資源。

回答

4

該網站可能拒絕非瀏覽器用戶代理。你可以嘗試設置的User-Agent:

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

除非你要使用[真實的用戶代理字符串(HTTP:// www.useragentstring.com/pages/useragentstring.php),也許「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 Illegal PORT命令,EPSV ALL生效 at sun.net.ftp.FtpClient.openDataConnection(FtpClient。 (ftpURLConnection.java:373) at test.main(java:435) test.java:17)' – train5potting

1

遠投:會不會是你的網絡防火牆選擇性地過濾,你可以訪問,除非你使用自己的代理服務器?

一個快速測試:更改您的瀏覽器配置,以便它使用直接連接(沒有自動代理配置或給定代理),只需鍵入有問題的FTP服務器的URL,看看它是否工作。

如果不是,那可能是你的問題,你需要使用一個庫,讓你指定一個代理服務器,可能是HttpCore

如果一切都失敗了,安裝Wireshark的,看看這到底是在網絡層面happenning ...

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; 
    } 
相關問題