7

PDF ファイルの一部をダウンロードしようとしています ("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

前もって感謝します。

4

4 に答える 4

11

次のように変更してみてください。

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

と:

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

仕様14.35.1 バイト範囲に従って

同様に、仕様14.5 Accept-Rangesに従って、サーバーが実際に部分的なコンテンツの取得をサポートしているかどうかを確認することもできます。

boolean support = urlConnection.getHeaderField("Accept-Ranges").equals("bytes");
System.out.println("Partial content retrieval support = " + (support ? "Yes" : "No));
于 2013-07-14T22:42:58.463 に答える
1

サーバーがサポートしている場合 (および HTTP 1.1 サーバーがサポートしている場合) にのみ、範囲リクエストを使用できます...そして、チェックだけを行いたい場合は、GET リクエストの代わりに HEAD リクエストを送信します。同じヘッダー、すべて同じ、「GET」ではなく「HEAD」のみ。206 応答を受け取った場合、Range がサポートされていることがわかります。それ以外の場合は、200 応答を受け取ります。

于 2013-07-14T21:45:07.480 に答える
-2

setRequestPropertyのに URL に接続する必要があります

変化する:

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

に:

urlConnection.connect();
urlConnection.setRequestProperty("Range", "Bytes=0-24");
于 2017-03-22T17:19:17.093 に答える