JSoup获取内容类型然后获取数据

时间:2014-04-30 16:48:03

标签: java http-headers jsoup

所以目前我正在使用以下代码从网址中检索数据

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

在我获取数据之前,我已经决定要获取内容类型,所以我使用以下内容进行操作。

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

现在我想知道,这是两个独立的连接吗?这不高效吗?有没有办法让我在一个连接中获取内容类型和文档数据?

由于

2 个答案:

答案 0 :(得分:8)

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/xmlapplication/xhtml+xml,如果内容类型是其他类型,例如application/pdf它会抛出UnsupportedMimeTypeException,所以你不应该担心它。

答案 1 :(得分:0)

如果不了解Jsoup的内部结构,我们就无法知道。通常,当您只想获取文件的标题(在您的情况下为内容类型)而不下载实际文件内容时,您可以使用HTTP GET方法而不是GET方法来使用相同的URL。也许Jsoup API允许您设置方法,代码看起来不像是这样做,所以我下注它实际上获取整个文件。

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

我认为创建两个连接的开销会因为没有下载整个文件而被抵消,如果您的代码决定它不应该下载该文件,如果它不是内容类型那么你想要的。