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? P>
Y a-t-il une API ou une classe utile pour Dechunk les données en Java? P>
Et si quelqu'un, expérimenté sur le décodage HTTP, montre-moi une façon de faire ça? p>
4 Réponses :
Apache httpComponents P>
Oh, et si nous parlons du côté du client, httpurlConnection fait cela aussi. P>
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?
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"> Si vous insistez vraiment dans la bibliothèque d'une bibliothèque pour cela, je suggère de créer une classe comme java.net.urlconnection code> < / a> ( Mini tutoriel ici < / a>). Les deux gère totalement de manière transparente et vous donne une "normale"
introuvable code> retour. Httpclient à son tour est également livré avec un < Code> chunkedinputtream code> que vous devez simplement décorer votre
introuvable code> avec. p>
ChundedInputStream étend d'Inverstream code> 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 . P>
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 code> 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 code> chunkedinputtream code> dans ma réponse est cliquable (comme toutes les autres parties bleuisées). C'est un INPUTStream code>, vous pouvez simplement décorer une autre erreur
INPUTStream code> avec elle. Par exemple.
InputStream Entrée = Nouveau ChukedInPutStream (originalInput); code>.
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 code> 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.
Si vous recherchez une API simple, essayez de la DOCS: P> HttpRequest httpRequest = HttpRequest.get("http://jodd.org");
HttpResponse response = httpRequest.send();
System.out.println(response);
Voici une alternative rapide et sale qui ne nécessite aucune dépendance sauf Oracle Jre: Il utilise le même Cette implémentation ne fournit pas d'exceptions détaillées (numéros de ligne) sur le format de contenu incorrect. P> IT Fonctionne avec Java 8 mais pourrait échouer avec la prochaine version. Vous avez été prévenu. P> pourrait cependant être utile pour le prototypage. P> Vous pouvez choisir n'importe quel sun.net.www.http.chunkedinputStream code> comme
java.net.httpurlconnection code> fait derrière la scène. p>
lishiblement code> de mise en œuvre de Convert InputStretre à Byte Array à Java . P> P>