Je sais qu'il y avait un moyen de l'obtenir avec apache commons comme documenté ici: http://hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/HttpMethod.html et un exemple ici:
http://www.kodejava.org/examples/416.html
mais je pense que c'est obsolète. Existe-t-il un autre moyen de faire une requête http get en java et d'obtenir le corps de la réponse sous forme de chaîne et non de flux?
java
apache-httpclient-4.x
apache-commons
Danois94
la source
la source
Réponses:
Chaque bibliothèque à laquelle je pense renvoie un flux. Vous pouvez utiliser
IOUtils.toString()
d' Apache Commons IO pour lire unInputStream
en unString
dans un appel de méthode. Par exemple:Mise à jour: j'ai changé l'exemple ci-dessus pour utiliser l'encodage du contenu de la réponse si disponible. Sinon, il sera par défaut UTF-8 comme meilleure estimation, au lieu d'utiliser la valeur par défaut du système local.
la source
Content-Encoding
tête de la réponse si disponible.Voici deux exemples de mon projet de travail.
Utilisation
EntityUtils
etHttpEntity
En utilisant
BasicResponseHandler
la source
response.getEntity()
et il est maintenant disponible en tant queresponseString
. si vous essayez de refaire un response.getEntity (), il reviendraIllegalStateException
.Voici un exemple d'un autre projet simple sur lequel je travaillais en utilisant la bibliothèque httpclient d'Apache:
utilisez simplement EntityUtils pour saisir le corps de la réponse sous forme de chaîne. très simple.
la source
C'est relativement simple dans le cas particulier, mais assez délicat dans le cas général.
La réponse dépend de l'
Content-Type
en-tête de la réponse HTTP .Cet en-tête contient des informations sur la charge utile et peut définir le codage des données textuelles. Même si vous supposez des types de texte , vous devrez peut-être inspecter le contenu lui-même afin de déterminer le codage de caractères correct. Par exemple, consultez la spécification HTML 4 pour plus de détails sur la façon de procéder pour ce format particulier.
Une fois le codage connu, un InputStreamReader peut être utilisé pour décoder les données.
Cette réponse dépend du fait que le serveur fait la bonne chose - si vous voulez gérer les cas où les en-têtes de réponse ne correspondent pas au document, ou les déclarations de document ne correspondent pas au codage utilisé, c'est une autre marmite de poisson.
la source
Vous trouverez ci-dessous un moyen simple d'accéder à la réponse sous forme de chaîne à l'aide de la bibliothèque client HTTP Apache.
la source
Et pour ça?
la source
La réponse de McDowell est correcte. Cependant, si vous essayez d'autres suggestions dans quelques-uns des articles ci-dessus.
Ensuite, il vous donnera illégaleStateException indiquant que le contenu est déjà consommé.
la source
Nous pouvons également utiliser le code ci-dessous pour obtenir la réponse HTML en java
la source
Voici un moyen léger de le faire:
Avec bien sûr
responseString
la réponse et la réponse du site Web étant de typeHttpResponse
, renvoyées parHttpClient.execute(request)
la source
Voici l'extrait de code qui montre une meilleure façon de gérer le corps de la réponse sous forme de chaîne, qu'il s'agisse d'une réponse valide ou d'une réponse d'erreur pour la requête HTTP POST:
la source
Vous pouvez utiliser une bibliothèque tierce qui envoie une requête Http et gère la réponse. Un des produits les plus connus serait Apache commons HTTPClient: HttpClient javadoc , HttpClient Maven artifact . Il existe de loin moins connu mais beaucoup plus simple HTTPClient (qui fait partie d'une bibliothèque open source MgntUtils écrite par moi): MgntUtils HttpClient javadoc , MgntUtils maven artifact , MgntUtils Github . En utilisant l'une de ces bibliothèques, vous pouvez envoyer votre requête REST et recevoir une réponse indépendamment de Spring dans le cadre de votre logique métier
la source
Si vous utilisez Jackson pour désérialiser le corps de la réponse, une solution très simple consiste à utiliser
request.getResponseBodyAsStream()
au lieu derequest.getResponseBodyAsString()
la source