2009-08-26 6 views
9

Je voudrais savoir s'il existe un moyen de savoir si un serveur prend en charge la fonctionnalité de reprise de reprise et si cette fonction est prise en charge, comment envoyer une demande de reprise?HttpWebRequest ou WebRequest - Reprendre Télécharger ASP.NET

Je cherchais une solution où ma page ASP.NET peut faire un téléchargement depuis un serveur à moi, quelque chose comme « rapidleech » fait aujourd'hui, mais je voudrais vérifier si le serveur où je demande le téléchargement prend en charge la fonctionnalité.

Répondre

24

La reprise des fichiers est effectuée en spécifiant la plage d'octets du fichier que vous souhaitez télécharger à l'aide de l'en-tête HTTP Range. Cela peut être fait dans .NET avec la fonction HttpWebRequest.AddRange.

Par exemple:

request.AddRange(1000); 

indique au serveur pour commencer à envoyer à l'octet 1000e du fichier.

Si le serveur prend en charge l'en-tête Range, il enverra le contenu avec un statut HTTP de 206 (Partial Content) au lieu du 200 normal (OK). Voir le HTTP Spec.

Pour vérifier si le serveur prend en charge la reprise avant de tenter le téléchargement, modifiez le Method "HEAD". Le serveur renverra 206 (contenu partiel) s'il prend en charge la reprise, et 200 (OK) si ce n'est pas le cas.

+0

donc, si le serveur ne marche pas suport, sera-t envoyer un 200 normal? – Cleiton

+0

Oui. Selon la spécification HTTP, le serveur enverra un 200 normal avec tout le contenu s'il ne supporte pas les plages. Vous pouvez également vérifier ce que le serveur spécifié dans l'en-tête "Accept-Ranges" lors de votre téléchargement initial tente de voir s'il prend en charge les plages d'envoi (devrait être "bytes" ou "none"). Cet en-tête n'est pas requis, donc s'il n'y a pas d'en-tête "Accept-Ranges", il peut accepter des plages. –

+0

@Adam, merci beaucoup! – Cleiton

Questions connexes