サーバーがファイル転送の再開またはリクエストの取得をサポートしているかどうかをどのように判断しますか?
私の考えは、getリクエストを0ではなくバイト「2」で開始するようにヘッダーを設定し、それが適切な結果をもたらした場合はすぐにhttpリクエストを閉じることでした。
しかし、この情報を私に明らかにする別の種類のプローブに対するサーバーの応答について何かあるのだろうかと思っていました。
サーバーのダウンロード再開機能を精査するには、任意の値を含むRangeヘッダーを提供するサーバーにHEAD要求を送信します。応答コードが206の場合、再開がサポートされます。
Curlの例:
$ curl -i -X HEAD --header "Range: bytes=50-100" http://mirrors.melbourne.co.uk/ubuntu-releases//raring/ubuntu-13.04-desktop-AMD64.iso
更新:
Javaの例を次に示します。
import org.Apache.http.client.ResponseHandler;
import org.Apache.http.client.HttpClient;
import org.Apache.http.HttpResponse;
import org.Apache.http.client.methods.HttpHead;
import org.Apache.http.impl.client.DefaultHttpClient;
import org.Apache.http.message.BasicHeader;
public class ResumeChecker {
public final static void main(String[] args) throws Exception {
HttpClient httpclient = new DefaultHttpClient();
HttpHead httpRequest = new HttpHead("http://www.google.com");
httpRequest.addHeader(new BasicHeader("Range", "bytes=10-20"));
System.out.println("Executing request " + httpRequest.getURI());
HttpResponse response = httpclient.execute(httpRequest);
// Check here that response.getStatusLine() contains 206 code
}
}
ただし、mysqlfはテストしていません。
@aadelの答えに追加:
最近のほとんどのサーバーは、再開をサポートしている場合に備えて、Accept-Ranges: bytes
ヘッダーで応答します。 RequestMaker または Insomnia は、要求/応答ヘッダーの調査に役立ちます。
ダウンロードを開始、停止、再開してテストできます。
curl --continue-at - http://... >> file.out
何らかの理由で、これは(別の答えから)私に403を与えました:
curl -i -X HEAD --header "Range: bytes=50-100" http://...