2016-08-23 81 views
0

我到处寻找,但无法找到我的具体情况的解决方案。Android - 如何从FTP网站提取HTML

我有一个网站是必不可少的只是一堆文件的目录列表(在服务器上启用目录列表)。 网站URL架构是'ftp://'。我想要做的就是提取HTML,以便可以获取目录中文件的名称和URL。我曾尝试下面的代码(对不起,我不能发布的实际FTP URL):

String ftpURL = "ftp://blah.com" 
URL url = new URL(ftpURL); 
URLConnection urlc = url.openConnection(); 

// open the stream and put it into BufferedReader 
BufferedInputStream bis = new BufferedInputStream(urlc.getInputStream()); // ERROR HERE 

int inputLine; 
String outputHtml = ""; 


while ((inputLine = bis.read()) != -1) { 
    outputHtml += inputLine; 
} 

bis.close(); 

当我运行这段代码我得到的代码4号线这个错误:

的java .io.IOException:无法连接到服务器:无法检索 文件:550

编辑:如果从FTP站点中提取HTML的可能性也不大,我怎么会去得到一个列表的名字和找到ftp URL中指定的目录中的每个文件? 此外,我应该注意到我可以公开访问ftp站点,并且可以查看所有子文件和目录,而无需任何身份验证。

任何想法?谢谢!

+0

什么让你认为'ftp://'链接返回HTML? FTP协议与HTTP分开且不同。浏览器在浏览ftp://链接时看到的任何内容都是浏览器与FTP服务器通话,然后将结果内部呈现为HTML。没有HTML通过电线发送。 –

+0

尝试使用FTP客户端,如http://commons.apache.org/proper/commons-net/ –

+0

@JimGarrison:您可以使用FTP传输任何类型的数据,即图像,程序..以及HTML文件。数据的内容(图像,HTML ...)与协议(HTTP,FTP,...)无关。 –

回答

0

java.io.IOException异常:无法连接到服务器:无法检索文件:550

“550”是通过FTP服务器响应为您请求文件发送验证码。按照FTP standard这意味着:

 550 Requested action not taken. 
     File unavailable (e.g., file not found, no access) 

这只是意味着你的URL可能是错误的,即该文件根本不具有此名称的服务器存在,或者你没有取回任何许可。在这种情况下,您也应该无法在Web浏览器中检索相同的URL。请注意,文件名的大小写与大多数FTP服务器有关。

请注意,您不能通过尝试访问ftp://hostname/directory来获取FTP中的目录内容,因为目录不是文件。您在浏览器中看到的结果是浏览器在FTP服务器上执行的目录列表与检索文件不同。要获得目录列表,您需要使用FTP库,例如URLConnection将无济于事。有关更多信息,请参见URLConnection FTP list files

+0

我猜是因为URL没有指向任何文件 –

+0

@Steffen奇怪的是,当我访问我的Web浏览器上的ftp URL时,我可以查看目录中的所有子文件,并可以打开它们查找。并且在服务器上ftp URL设置为public,不需要认证... – n00bAppDev

+0

@ n00bAppDev:查看编辑的响应:它不是存储在服务器上的HTML文件。相反,浏览器正在为你做目录列表。 –