Si je veux télécharger partiellement un fichier et définir une seule plage dans l'en-tête de demande, j'obtiens le flux d'octets du fichier demandé dans le corps de la réponse. Mais si je spécifie plusieurs plages comme ci-dessous, je reçois toujours pour chaque plage définie un en-tête de réponse supplémentaire (qui décrit la plage demandée) dans le corps de la réponse qui corrompt le fichier téléchargé.Requête HTTP avec plusieurs gammes
static void Main(string[] args)
{
Console.Write("Please enter target File: ");
string Target = Console.ReadLine();
string Source = @"http://mozilla-mirror.3347.voxcdn.com/pub/mozilla.org/firefox/releases/3.6/win32/de/Firefox%20Setup%203.6.exe";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Source);
request.Credentials = CredentialCache.DefaultCredentials;
// define multiple Ranges
request.AddRange( 0, 1000000);
request.AddRange(1000000, 2000000);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (Stream source = response.GetResponseStream())
{
using (FileStream target = File.Open(Target, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite))
{
byte[] buffer = new byte[4096];
int BytesRead = 0;
int TotalBytesRead = 0;
while((BytesRead = source.Read(buffer, 0, buffer.Length)) > 0)
{
target.Write(buffer, 0, BytesRead);
TotalBytesRead += BytesRead;
Console.WriteLine("{0}", TotalBytesRead);
}
}
}
Console.WriteLine("Downloading Finished!");
Console.ReadLine();
}
Demande comme indiqué dans Wireshark:
http://img197.imageshack.us/img197/8199/requesty.png
Corps de la réponse ne doit contenir que octet-stream du fichier, mais contient en outre la réponse en-tête indésirables au début de chaque plage définie:
Est-il possible d'éviter l'en-tête de réponse supplémentaire dans le corps sans demander de chaque plage séparément?
ou
Est-il possible de construire dans l'en-tête pour filtrer de réponse supplémentaire, dont la taille peut varier en fonction du serveur HTTP?
Juste une question: pourquoi faites-vous cela? Je suppose que votre code ci-dessus est juste un exemple, car il est inutile de demander directement des plages contiguës comme ça? –