2010-12-01 51 views
1

J'essaye d'empêcher org.apache.http.client.HttpClient (link text) de télécharger le corps quand la ressource disons plus de 10 MB. Ce que j'ai fait après avoir cherché ici, et d'autres, c'est faire un appel HEAD, puis vérifier l'en-tête Content-Length, et si c'est < 10MB, faire un appel GET, enfin faire quelque chose avec le corps de la réponse.Existe-t-il un moyen de ne pas télécharger le corps pendant l'appel Java HttpClient lorsque la ressource est grande?

Y aurait-il une meilleure solution à cela? Je veux éviter un appel supplémentaire.

Merci.

Répondre

2

Vous pouvez toujours faire un appel régulier et vérifier la longueur, et si la longueur> 10 Mo alors juste casser et annuler le téléchargement. Mais le problème est que socket téléchargera toujours autant que possible avant d'annuler. Je pense que faire un appel HEAD est la meilleure méthode.

2

Le meilleur moyen est certainement de faire la demande HTTP HEAD depuis HEAD pour seulement d'informations d'en-tête sur le fichier ou la ressource (comme stipulé sur RFC1945, Section 8.2).

À partir de la réponse de l'appel HEAD, récupérez l'en-tête de message Content-Length et vérifiez si la taille est inférieure ou supérieure à 10 Mo.

Si vous effectuez une opération GET, le corps de l'entité entière sera renvoyé.

Apache HttpClient (version 3) prend en charge HTTP HEAD.