使用HTTP请求下载文件的一部分

我正在尝试下载PDF文件的一部分(仅用于测试“Range”标题)。 我请求服务器获取Range中的字节(0-24),但仍然不是从内容中获取前25个字节(一部分),而是获取全长内容。 此外,我没有得到响应代码206(部分内容),而是将响应代码设置为200。

这是我的代码:

public static void main(String a[]) { try { URL url = new URL("http://download.oracle.com/otn-pub/java/jdk/7u21-b11/jdk-7u21-windows-x64.exe?AuthParam=1372502269_599691fc0025a1f2da7723b644f44ece"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestProperty("Range", "Bytes=0-24"); urlConnection.connect(); System.out.println("Respnse Code: " + urlConnection.getResponseCode()); System.out.println("Content-Length: " + urlConnection.getContentLengthLong()); InputStream inputStream = urlConnection.getInputStream(); long size = 0; while(inputStream.read() != -1 ) size++; System.out.println("Downloaded Size: " + size); }catch(MalformedURLException mue) { mue.printStackTrace(); }catch(IOException ioe) { ioe.printStackTrace(); } } 

这是输出:
Respnse Code: 200
Content-Length: 94973848
Downloaded Size: 94973848

提前致谢。

尝试更改以下内容

 urlConnection.setRequestProperty("Range", "Bytes=0-24"); 

有:

 urlConnection.setRequestProperty("Range", "bytes=0-24"); 

根据规范14.35.1 Byte Ranges

同样,根据规范14.5 Accept-Ranges ,您还可以使用以下内容检查您的服务器是否实际支持部分内容检索:

 boolean support = urlConnection.getHeaderField("Accept-Ranges").equals("bytes"); System.out.println("Partial content retrieval support = " + (support ? "Yes" : "No)); 

如果服务器支持它(和HTTP 1.1服务器应该),那么只有你可以使用范围请求…如果你想要做的就是检查,那么只需发送一个HEAD请求而不是GET请求。 相同的标题,相同的一切,只是“HEAD”而不是“GET”。 如果您收到206响应,您将知道支持Range,否则您将获得200响应。

您必须 setRequestProperty 之前连接到url

更改:

 urlConnection.setRequestProperty("Range", "Bytes=0-24"); urlConnection.connect(); 

至:

 urlConnection.connect(); urlConnection.setRequestProperty("Range", "Bytes=0-24"); 

我认为正确的标题是“内容范围”,而不是您正在使用的“范围”。