所以目前我正在使用以下代码从网址中检索数据
Document doc = Jsoup.connect(url).get();
在我获取数据之前,我已经决定要获取内容类型,所以我使用以下内容进行操作。
Connection.Response res = Jsoup.connect(url).timeout(10*1000).execute();
String contentType = res.contentType();
现在我想知道,这是两个独立的连接吗?这不高效吗?有没有办法让我在一个连接中获取内容类型和文档数据?
由于
答案 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/xml
或application/xhtml+xml
,如果内容类型是其他类型,例如application/pdf
它会抛出UnsupportedMimeTypeException
,所以你不应该担心它。
答案 1 :(得分:0)
如果不了解Jsoup的内部结构,我们就无法知道。通常,当您只想获取文件的标题(在您的情况下为内容类型)而不下载实际文件内容时,您可以使用HTTP GET方法而不是GET方法来使用相同的URL。也许Jsoup API允许您设置方法,代码看起来不像是这样做,所以我下注它实际上获取整个文件。
HTTP规范允许客户端稍后重用连接,它们被称为HTTP持久连接,并且它避免了必须为每个对同一服务器的调用创建连接。但是,在这种情况下,由于您没有处理代码中的连接,所以它取决于客户端Jsoup,以确保它在每次请求后都没有关闭连接。
我认为创建两个连接的开销会因为没有下载整个文件而被抵消,如果您的代码决定它不应该下载该文件,如果它不是内容类型那么你想要的。