HTTP Get:只下载标题? (不支持HEAD)

时间:2012-01-13 14:53:49

标签: java apache http http-get

在我的代码中,我使用一些Http Get请求将一些文件作为流下载。我使用以下代码:

public String getClassName(String url) throws ClientProtocolException, IOException {
        HttpResponse response = sendGetRequestJsonText(url);

        Header[] all = response.getAllHeaders();
        for (Header h : all) {
            System.out.println(h.getName() + ": " + h.getValue());
        }

        Header[] headers = response.getHeaders("Content-Disposition");
        InputStreamParser.convertStreamToString(response.getEntity().getContent());
        String result = "";
        for (Header header : headers) {
            result = header.getValue();
        }
        return result.substring(result.indexOf("''") + "''".length(), result.length()).trim();
    }

但这会下载响应的完整内容。我想只检索没有内容的http标头。 HEAD请求似乎不起作用,因为我得到状态501,没有实现。我怎么能这样做?

2 个答案:

答案 0 :(得分:18)

您可以考虑仅发出HEAD请求,而不是发出GET请求:

  

HEAD方法与GET相同,只是服务器不能   在响应中返回一个消息体。元信息包含   在HTTP头中响应HEAD请求应该是相同的   响应GET请求发送的信息。这种方法可以   用于获取有关该隐含的实体的元信息   请求而不转移实体主体本身。这个方法是   经常用于测试超文本链接的有效性,可访问性,   和最近的修改。

答案 1 :(得分:6)

您可以在请求中使用Range header来指定要包含在响应实体中的字节范围。可能是这样的:

Range: bytes=0-0

如果它确实有效,您应该收到一个206 Partial Content,其中包含响应实体中存在的Range标头中指定的字节。但是,我没有试过这个,而且保证也没有工作:

  

服务器可以忽略Range标头。