2011-10-11 662 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; 
    } 
相关问题