7
votes

Décodage http chunté en Java?

Je décodage des paquets HTTP. Et j'ai fait face à un problème que le problème du morceau. Lorsque je reçois un paquet HTTP, il a une en-tête et un corps. Quand le décodeur de transseur est chunté, je ne sais pas quoi faire?

Y a-t-il une API ou une classe utile pour Dechunk les données en Java?

Et si quelqu'un, expérimenté sur le décodage HTTP, montre-moi une façon de faire ça?


0 commentaires

4 Réponses :


1
votes

Apache httpComponents

Oh, et si nous parlons du côté du client, httpurlConnection fait cela aussi.


1 commentaires

Je vais décoder HTTP hors ligne (paquets déjà capturés) et je n'ai qu'un en-tête et un corps. J'ai donc besoin d'une API qui obtient juste l'en-tête et le corps et me donne des données décodées. Y a-t-il une API comme ça?



12
votes

Utilisez un client HTTP complet comme Apache httpComponents Client ou juste le Java SE fourni < Un href = "http://download.oracle.com/javase/6/docs/api/java/net/urlconnection.html" rel = "nOfollow noreferrer"> java.net.urlconnection < / a> ( Mini tutoriel ici < / a>). Les deux gère totalement de manière transparente et vous donne une "normale" introuvable retour. Httpclient à son tour est également livré avec un < Code> chunkedinputtream que vous devez simplement décorer votre introuvable avec.

Si vous insistez vraiment dans la bibliothèque d'une bibliothèque pour cela, je suggère de créer une classe comme ChundedInputStream étend d'Inverstream et d'écrire une logique en conséquence. Vous pouvez trouver plus de détails sur la façon de l'analyser dans Cet article Wikipedia .


6 commentaires

En fait, je fais un décodage HTTP hors ligne et je n'ai que l'en-tête et le corps du paquet HTTP. Et je vais décoder le paquet. Mais j'ai besoin d'une API qui obtient l'en-tête et le corps et me donne des données décodées. Y a-t-il donc API?


L'article Wikipedia contient détaillé comment ressemblent un morceau. Vous pouvez fondamentalement diviser sur CRLF (\ r \ n). Ce sont les octets 10 et 13. La première partie est alors l'en-tête qui représente la longueur du morceau dans Hex. La deuxième partie est alors les données du morceau lui-même. Vous venez de collecter et de concaténer tous ces morceaux. Le chunkedinputtream fait exactement cela.


Désolé, il y a deux chunkedinputtream de première classe: Jigsaw .w3.org / DOC / programmeur / API / ORG / W3C / www / http / ... Deuxième: HC.APACHE.ORG/HTTTPCLIENT-3.X/APIDOCS/ORG/APACHE/COMMONS/... Lequel est juste pour cela? Et avez-vous des informations sur la manière d'utiliser ChundedInputStream?


La pièce chunkedinputtream dans ma réponse est cliquable (comme toutes les autres parties bleuisées). C'est un INPUTStream , vous pouvez simplement décorer une autre erreur INPUTStream avec elle. Par exemple. InputStream Entrée = Nouveau ChukedInPutStream (originalInput); .


Premièrement, merci pour vos réponses, ils m'aident en effet. Mais j'ai une autre question chunkedinputtream constructeur obtient sessionInputBuffer (interface) comment je vais convertir la chaîne (corps chund) à ce format?


HMM, il a changé conformément à httpClient 4.x. Eh bien, choisissez le httpClient 3.x un qui prend un introuvable ou homebrew one. La déguisement d'un corps déchiqueté est assez trivial. Il suffit de scinder le CRLF et faites le mathématique logique.



1
votes

Si vous recherchez une API simple, essayez jodd http forte> bibliothèque ( http: //jodd.org/doc/http.html ). Il gère un codage de transfert à chunée pour vous et vous obtenez tout le corps comme une corde en arrière.

de la DOCS: P>

HttpRequest httpRequest = HttpRequest.get("http://jodd.org");
HttpResponse response = httpRequest.send();

System.out.println(response);


0 commentaires

0
votes

Voici une alternative rapide et sale qui ne nécessite aucune dépendance sauf Oracle Jre: xxx

Il utilise le même sun.net.www.http.chunkedinputStream comme java.net.httpurlconnection fait derrière la scène.

Cette implémentation ne fournit pas d'exceptions détaillées (numéros de ligne) sur le format de contenu incorrect.

IT Fonctionne avec Java 8 mais pourrait échouer avec la prochaine version. Vous avez été prévenu.

pourrait cependant être utile pour le prototypage.

Vous pouvez choisir n'importe quel lishiblement de mise en œuvre de Convert InputStretre à Byte Array à Java .


0 commentaires