2014-04-30 70 views
1

所以我目前使用下面的代码JSoup获取内容类型,那么数据

Document doc = Jsoup.connect(url).get(); 

我取我已经决定我想要得到的内容类型的数据检索之前从URL中的数据,所以我用下面的方法做到这一点。

Connection.Response res = Jsoup.connect(url).timeout(10*1000).execute(); 
String contentType = res.contentType(); 

现在我想知道,这是否使2个单独的连接?这不是有效的吗?有没有办法让我在1个连接中获取内容类型和文档数据?

感谢

回答

7

Jsoup.connect(url).get()Jsoup.connect(url).timeout(10*1000).execute();是两个独立的连接。也许你正在寻找的东西像

Response resp = Jsoup.connect(url).timeout(10*1000).execute(); 
String contentType = res.contentType(); 

后来解析响应的身体作为一个文档

Document doc = resp.parse(); 

反正Jsoup默认情况下只分析text/*application/xml,或application/xhtml+xml如果内容类型是其他,像application/pdf它会抛出UnsupportedMimeTypeException所以你不应该担心它。

0

没有看着我们无法知道的Jsoup内部构件。通常,当您只想获取文件的标题(您的情况下的内容类型)而不下载实际的文件内容时,可以使用HTTP GET方法而不是GET方法指向相同的URL。也许Jsoup API允许你设置方法,代码看起来并不像它这样做,所以我打赌它实际上是获取整个文件。

HTTP规范允许客户端稍后重新使用连接,它们被称为HTTP持久连接,并且它避免了必须为每次调用同一服务器创建一个连接。然而,这取决于客户端,在这种情况下,由于您没有处理代码中的连接,因此确保它在每次请求后都不关闭连接。

我相信,创建两个连接的开销会被下载整个文件所抵消,如果您的代码决定它不应该下载该文件,如果它不是您想要的内容类型。