Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HTTP Get:只下载头?(头部不受支持)_Java_Apache_Http_Http Get - Fatal编程技术网

Java HTTP Get:只下载头?(头部不受支持)

Java HTTP Get:只下载头?(头部不受支持),java,apache,http,http-get,Java,Apache,Http,Http Get,在我的代码中,我使用一些Http Get请求作为流下载一些文件。我使用以下代码: public String getClassName(String url) throws ClientProtocolException, IOException { HttpResponse response = sendGetRequestJsonText(url); Header[] all = response.getAllHeaders(); for (

在我的代码中,我使用一些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,未实现。我怎样才能做到这一点呢?

< P>而不是提出一个GET请求,你可以考虑只需提出一个请求:

HEAD方法与GET相同,只是服务器不能 在响应中返回消息正文。包含的元信息 在HTTP中,响应头请求的头应该相同 响应GET请求而发送的信息。这种方法可以 用于获取由 请求而不传输实体体本身。这种方法是可行的 通常用于测试超文本链接的有效性、可访问性、, 以及最近的修改


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

Range: bytes=0-0
如果确实有效,您应该会收到一个
206部分内容
,其中包含响应实体中
范围
标题中指定的字节。但是,我没有尝试过这种方法,而且也不能保证它会起作用:

服务器可能会忽略范围标头


我尝试过这个,但标题现在看起来不同了:(我再次检查,状态代码为501,未实现。因此,我的服务器似乎无法处理此类请求。还有其他可能性吗?@Roflcoptr-这太差劲了。您可能可以使用标头请求实体的0-0范围。但我从未使用
range
标头或部分响应,因此我无法对此进行说明。也许吧s其他人可以插话。此外,服务器也可能会忽略这些头。目前我找到了一个解决方法。我发出get请求,但一旦收到头,我就调用abort。这是一个好做法吗?@Roflcoptr-听起来……很粗略。我想我不知道这会有什么后果,但它确实存在给我一种不好的感觉。服务器实现范围而不是头有什么奇怪的?而且,范围0-0包含1字节。@不可更改-是的,这也是我的想法;考虑到未实现的
HEAD
,服务器很可能没有这个功能。对于1字节的东西,RFE2616(第14.35.1节)说:“如果存在最后一个字节pos值,则它必须大于或等于该字节范围规范中的第一个字节pos,否则字节范围规范在语法上无效。”。"-对我来说,这表示0字节的范围是有效的。0-0是有效的,但它意味着1字节,第0字节。您不能请求0字节;206响应不能返回0字节。这确实有点奇怪。虽然在实践中,请求0字节没有用;但不能这样做违背了程序员的本能。@unreputable-再次读取它,这是有道理的(考虑到范围是包括在内的)。我想如果OP试图限制传输的字节数,那么0比1好,比10000好(或整个实体)。因此,减少传输的字节数可能就足够了。只是不读取响应体?@unreputable如果我知道如何做,我会这样做;)
InputStreamParser.convertStreamToString(response.getEntity().getContent());
是读取实体的内容;您可能就是不这样做?然后我会收到一个错误,因为内容没有被使用