我写了这个方法来下载给定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()
。有人有什么建议吗?
答案 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