Apache HttpClient le contenu de la réponse de la longueur retourne -1
Pourquoi le Code suivant renvoie -1? Semble que la demande a échoué.
public static void main(String[] args)
{
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.google.de");
HttpResponse response;
try
{
response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
EntityUtils.consume(entity);
//Prints -1
System.out.println(entity.getContentLength());
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
httpGet.releaseConnection();
}
}
Et est-il possible d'obtenir la réponse à la Chaîne?
Javadoc pour
Javadoc : hc.apache.org/httpcomponents-core-4.2.x/httpcore/apidocs/org/...
Bien documenté... Toute suggestion pour résoudre ce problème?
Pourquoi avez-vous besoin de la longueur du contenu, pour commencer? Il sera préférable de consommer le contenu de la réponse (probablement le
est-il possible d'obtenir la réponse en tant que Chaîne de caractères? oui. Essayez quelque chose au lieu de demander à le codez.
getContentLength
: le nombre d'octets du contenu, ou un nombre négatif si l'inconnu.Javadoc : hc.apache.org/httpcomponents-core-4.2.x/httpcore/apidocs/org/...
Bien documenté... Toute suggestion pour résoudre ce problème?
Pourquoi avez-vous besoin de la longueur du contenu, pour commencer? Il sera préférable de consommer le contenu de la réponse (probablement le
InputStream
) au lieu de valider la réponse par le biais de ce mécanisme.est-il possible d'obtenir la réponse en tant que Chaîne de caractères? oui. Essayez quelque chose au lieu de demander à le codez.
OriginalL'auteur PeterMoron | 2013-09-10
Vous devez vous connecter pour publier un commentaire.
Essayez d'exécuter
Il permet d'imprimer
Ce n'est pas un problème, la page que vous avez demandée n'est pas simplement de fournir un
Content-Length
d'en-tête dans sa réponse. En tant que tel, leHttpEntity#getContentLength()
retourne-1
.EntityUtils
a un certain nombre de méthodes, dont certaines en retour unString
.OriginalL'auteur Sotirios Delimanolis
S'il vous plaît notez que l'en-tête de réponse de Transfert de nom de Codage. Sa valeur est mémorisée qui signifie que les données sont deliveryed bloc par bloc. Transfer-Encoding: chunked et Content-Length ne tourne pas en même temps.
Il y a deux raison.
Alors, quand il n'y a pas de longueur du contenu de l'en-tête, vous pouvez trouver la taille de chaque bloc bloc avant de le corps de contenu. Par exemple:
Au-dessus des en-têtes et le contenu nous dire, il y a deux blocs de données. La taille du premier bloc est de 11. la taille de la deuxième bloc est 3. De sorte que le contenu de la longueur est de 14.
ce qui concerne,
Xici
OriginalL'auteur xici
Si vous voulez vraiment obtenir la longueur du contenu sans se soucier du contenu, vous pouvez le faire.
EntityUtils.toByteArray(httpResponse.getEntity()).longueur
OriginalL'auteur gaojun1000