Java:url.openStream()的文件类型`
我写这个方法是为了下载一个给定URL的网页。它设计为只下载HTML。如果我想做错误检查并且只允许HTML,我应该怎么做Java:url.openStream()的文件类型`,java,file,url,stream,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
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
但是URL:
http://www.smu.com
为url.getFile()
返回“
”。有人有什么建议吗 要测试您是否获得html,可以使用URL.openConnection()获取URL连接,然后可以调用getContentType(),该函数应该为html页面返回“text/html”。然后,您可以在UrlConnection()上使用getInputStream()方法作为url.openStream()的插入替换
如果您确实想验证服务器发送给您的内容是否为HTML,则需要找到HTML验证库。对不起,我现在还不知道
需要考虑的原因,这可能是为什么www. SUMUCOM不返回数据,是因为根据HTTP连接上发送的用户代理字符串,许多网站将提供不同的数据。您可能需要在您的UrlConnection上修改它:UrlConnection.addRequestProperty(“用户代理”,…);请参见此处的更多信息:
“http://www.smu.com“将中的数据发送给您”http://www.smu.com/index.html". 这是请求“/”时web服务器的(常见)行为(理论上,web服务器也可以使用302或诸如此类的命令重定向)。因此,检查URL是否以“.html”结尾完全是愚蠢的(更不用说它可能是“.php”、“.asp”或其他任何形式) 然而,提供HTML的优秀web服务器应该返回“text/HTML”的内容类型
头。(这当然是假设它返回的是HTML,而不是XHTML、XML或诸如此类的东西,并且web服务器没有损坏)
您可能会希望使用。这是一个例子
我如何确定顶部位
我运行了curl-I
(和../index.html)并比较了结果。它们看起来像:
HTTP/1.1 200 OK
Date: Tue, 19 Oct 2010 18:01:39 GMT
Server: Apache
Last-Modified: Wed, 27 Jan 2010 20:27:52 GMT
Accept-Ranges: bytes
Content-Length: 2993
Content-Type: text/html
如果您想在检查
内容类型
标题之外检查内容,那么您可以使用HTML解析器,例如(名称错误!)。smu.com确实返回数据,URL只是没有文件部分(斜杠后)@Bart请求尝试获取“/”web服务器愉快地返回“/index.HTML”(这取决于web服务器和这样的配置——它可能只是愉快地返回了404,但这对web用户来说并不友好)。它没有解释“没有数据”,但它确实解释了为什么不需要“完整路径”。更多信息,请参阅我的答案(尽管已经接受这个答案)@pst:我知道,我是这么说的,但你说得好多了