时间:2010-10-19 17:32:55

标签: java file url stream

我写了这个方法来下载给定URL的网页。它旨在仅下载HTML。如果我想进行错误检查并只允许HTML,我应该怎么做?

public static String download(URL url) throws IOException {
    InputStream is = url.openStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    String page = "";
    String line;    
    while((line = reader.readLine()) != null){
        page = page + line;
    }
    return page;
}

最初我打算这样做:

String file = url.getFile();
if(file.subString(file.indexOf("."),file.length()-1).equalsIgnoreCase("HTML")){
    // do method

然而,网址:http://www.smu.com会为""返回url.getFile()。有人有什么建议吗?

3 个答案:

答案 0 :(得分:4)

要测试你是否获得了html,你可以使用URL.openConnection()来获取UrlConnection然后可以调用getContentType(),它应该为HTML页面返回“text / html”。然后,您可以使用UrlConnection()上的getInputStream()方法替换url.openStream();

如果您确实想验证服务器发送的内容是否为HTML,则需要找到HTML验证库。我不知道一个副手,对不起。

要考虑的事情可能是www.smu.com没有返回数据的原因,许多网站将根据HTTP连接上发送的用户代理字符串提供不同的数据。您可能需要在UrlConnection上修改它:UrlConnection.addRequestProperty(“User-Agent”,...);在此处查看更多信息:Setting user agent of a java URLConnection

答案 1 :(得分:3)

如果要检查超出的内容,请检查Content-Type标题,那么您可以使用HTML解析器,例如(误导名称!)JTidy

答案 2 :(得分:2)

“http://www.smu.com”会向您发送“http://www.smu.com/index.html”中的数据。当请求“/”时,这是Web服务器的(常见)行为(理论上,Web服务器也可以使用302或其他方式重定向一个)。检查URL是否以“.html”结尾是完全愚蠢的(更不用说它可能是“.php”,“。asp”或其他)。

但是,提供HTML的 nice Web服务器应该返回“{/ 1}}标题”text / html“。 (这当然是假设它返回HTML而不是XHTML或XML或诸如此类的东西而且Web服务器没有被破坏)。

您可能希望使用URLConnection。这是一个example of URLConnection with headers

我如何确定最高位?

我运行了Content-Type(以及../index.html)并对结果进行了比较。他们看起来像:

curl -I http://www.smu.com