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

9 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();
    }
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*ska 19

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

HEAD方法与GET相同,只是服务器不能在响应中返回消息体.响应HEAD请求的HTTP头中包含的元信息应该与响应GET请求时发送的信息相同.该方法可用于获得关于请求所暗示的实体的元信息,而无需转移实体主体本身.此方法通常用于测试超文本链接的有效性,可访问性和最近的修改.


Rob*_*ska 6

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

Range: bytes=0-0
Run Code Online (Sandbox Code Playgroud)

如果它确实有效,您应该收到206 Partial Content带有Range响应实体中存在的标头中指定的字节的a .但是,我没试过这个,也不能保证工作:

服务器可以忽略Range标头.

  • 服务器实现 Range 但不实现 HEAD 有什么奇怪的?另外,范围 0-0 涵盖 1 个字节。 (2认同)
  • 0-0有效,但表示1字节,第0字节。您不能请求 0 字节;206 响应不能返回 0 字节。这确实有点奇怪。尽管在实践中,请求 0 字节是没有用的;但做不到这一点就违背了程序员的本能。 (2认同)