2013-03-12 3 views
0

J'écris un serveur Web HTTP. Mon serveur doit gérer les demandes multipart Http. Dans ma précédente implémentation, j'extrait les données à l'aide de l'en-tête de longueur de contenu présent dans chaque partie de la requête. Le client que j'utilisais donne un en-tête de longueur de contenu avec chaque partie de pièce (fichier) dans la requête multipart.Comment extraire des données d'une demande Http en plusieurs parties?

Mais un autre client n'indique pas la longueur de contenu de chaque fichier. Dans mon implémentation, j'utilise l'en-tête content-length pour extraire autant d'octets et les enregistrer dans un fichier.

Dites-moi comment extraire les données maintenant.

Les en-têtes que je reçois sont maintenant:

POST xxxxxxxxxxxxxxxxxxxxxxx&currentTab=PHOTOxxxxxxxxxxxxxxxx HTTP/1.1 
Content-Length: 6829 
Content-Type: multipart/form-data; boundary=SnlCg9JqTpQIl6t_mPzByTjZ8bD24kUj; charset=UTF-8 
Host: host 
Connection: Keep-Alive 
User-Agent: Apache-HttpClient/xxxxxxxx 
Accept-Encoding: gzip 

--SnlCg9JqTpQIl6t_mPzByTjZ8bD24kUj 
Content-Disposition: form-data; name="file"; filename="imagesCA5L2CL6_jpg(2)_jpg.jpg" 
Content-Type: photo/jpg 

**Some Data byte array** 
--SnlCg9JqTpQIl6t_mPzByTjZ8bD24kUj-- 

Dans cette demande, il est maintenant en-tête de longueur du contenu dans les données de la pièce.

EDIT:

Plus tôt ce client utilisé pour envoyer en-tête de longueur du contenu dans chaque partie. Mais pour une raison quelconque, il ne l'envoie plus. Quelqu'un peut-il suggérer une raison pour cela?

grâce

+0

Avez-vous essayé HttpContext.Current.Request.Files [0] .InputStream; ? – Popeye

+0

Je n'utilise pas de classes C# .. Je reçois des données brutes de sockets que je dois analyser. – vijay053

Répondre

0

Jetez un oeil à RFC 2616 si vous souhaitez implémenter un serveur HTTP/1.1. Voir section 4.4 sur la façon de déterminer la longueur du message. Voir RFC 2388 sur la façon de mettre en œuvre multipart/form-data. La vraie réponse est: ne réinventez pas la roue, ou vous devrez réimplémenter quelques centaines de pages de RFC. Il y a des tonnes de bibliothèques et de serveurs là-bas.

Si vous voulez écrire votre propre serveur Web, par exemple en tant qu'exercice, vous auriez déjà trouvé ces RFC, n'est-ce pas?

Questions connexes