2009-06-10 7 views
4

Possible en double:
Converting Raw HTTP Request into HTTPWebRequest ObjectC# HTTP Demande Parser

J'ai un serveur HTTP personnalisé écrit en C# qui me donne la requête HTTP brute ...

 
GET /ACTION=TEST HTTP/1.1 
Host: localhost:8080 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-gb,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 

Y a-t-il quelque chose dans le framework .NET que je peux utiliser pour l'analyser ou dois-je le faire à la main?

Vive

+0

Voulez-vous dire que vous souhaitez convertir un flux d'octets en une instance HttpRequest? Je ne l'ai jamais rencontré, mais j'imagine qu'il doit y avoir du code dans le framework qui le fait (dans HttpWebRequest quelque part peut-être). – samjudson

+0

yeh mais comment :-) –

Répondre

3

On dirait que cette question a été posée here. Apparemment, il n'y a pas de façon intégrée de le faire.

+0

ah, vous me battre à elle. merci :-) –

6

Extraire HttpMachine - un composant du serveur HTTP Kayak pour dotNET. HttpMachine est un analyseur HTTP piloté par les callbacks.

Pour mouiller votre appétit, voici l'interface IHttpParserHandler:

using System 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace HttpMachine 
{ 
    public interface IHttpParserHandler 
    { 
     void OnMessageBegin(HttpParser parser); 
     void OnMethod(HttpParser parser, string method); 
     void OnRequestUri(HttpParser parser, string requestUri); 
     void OnFragment(HttpParser parser, string fragment); 
     void OnQueryString(HttpParser parser, string queryString); 
     void OnHeaderName(HttpParser parser, string name); 
     void OnHeaderValue(HttpParser parser, string value); 
     void OnHeadersEnd(HttpParser parser); 
     void OnBody(HttpParser parser, ArraySegment<byte> data); 
     void OnMessageEnd(HttpParser parser); 
    } 
} 
+0

J'ai implémenté ceci dans un proxy transparent du mien. Quand cela fonctionne, cela fonctionne très bien. Mais quand ce n'est pas le cas, il meurt d'une mort terrible. Un personnage mal placé et c'est mort. Génial, mais ne manque pas gracieusement. –