2013-08-06 9 views
20

Come si determina se un server supporta riprendere un trasferimento di file o ottenere una richiesta?determinare se il server supporta riprendere ottenere la richiesta

I miei pensieri erano per impostare l'intestazione per avviare la richiesta GET al byte "2" invece di 0, e subito chiudendo la richiesta HTTP se che ha dato il risultato corretto

ma mi chiedevo se c'era qualcosa la risposta del server per un diverso tipo di sonda che potrebbe rivelarmi questa informazione

risposta

32

Per sondare la funzionalità di ripristino del download di un server, è possibile inviare una richiesta HEAD al server che fornisce un'intestazione Range con valori arbitrari. Se il codice di risposta è 206, quindi riprendere è supportato.

Esempio con l'arricciatura:

$ curl -i -X HEAD --header "Range: bytes=50-100" http://mirrors.melbourne.co.uk/ubuntu-releases//raring/ubuntu-13.04-desktop-amd64.iso

Aggiornamento:

Ecco un esempio in 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 
    } 
} 

Tuttavia, non ho provato mysqlf.

+0

come farei questo con la libreria java apache? 'new BasicHeader (" Range "," byte = 50-100 ")? qualsiasi cosa in più – CQM

+0

Non so sulla libreria apache ma con l'URL della classe lib standard, è possibile utilizzare connection.setRequestProperty ("Range", "bytes =" + startvalue + "-" + endvalue) –

4

aggiunta alla risposta di @ Aadel:

maggior parte dei server al giorno d'oggi rispondono con Accept-Ranges: bytes intestazione nel caso in cui sostengono la ripresa. RequestMaker o Insomnia può aiutarti ad esaminare le intestazioni di richiesta/risposta.

+1

Ho visto - attivo, in natura - server che rispondono con Accept-Range: byte ma non supportano ancora download a distanza (almeno, forse per alcuni file ma non tutti). L'invio di una richiesta con Range ti consente di ottenere un 200 e l'intero file anziché un 206 con solo la parte richiesta. Potrebbero essere dovuti a proxy HTTP/HTTPS scritti male. Morale della trama: non fidarti delle intestazioni. Fai comunque la richiesta HEAD. O ricontrolla il codice di risposta del GET. – Corrodias

+1

Correzione al mio ultimo commento: non è necessariamente scritto male. Un 200 è una risposta valida se l'intestazione If-Range indica che stai richiedendo una versione diversa del file da ciò che il server ha. Tuttavia, il takeaway è che un 200 è una risposta valida a una richiesta Range. – Corrodias

Problemi correlati