2009-06-09 2 views
5

У меня есть сокет, который принимает HTTP-запросы.Как создать класс .NET HttpWebRequest из полученного байта Socket []

Итак, у меня есть сырой http-запрос в форме byte [] из моего сокета.

Я должен изучить этот запрос - НО

Вместо того чтобы изобретать колесо - я могу «бросить» этот байтовый массив в System.Net.HttpWebRequest или что-то подобное?

----- UPDATE ---------

Так или иначе я не мог найти ответ. Разобравшись немного дальше, хотя я думаю, что это может быть сделано путем вызова функции:

HttpApi.dll Я думаю, что HttpWebRequest использует эту библиотеку DLL (winxpsp2)

интересная структура является HTTP_REQUEST

C++ 
typedef struct _HTTP_REQUEST { 
    ULONG     Flags; 
    HTTP_CONNECTION_ID  ConnectionId; 
    HTTP_REQUEST_ID  RequestId; 
    HTTP_URL_CONTEXT  UrlContext; 
    HTTP_VERSION   Version; 
    HTTP_VERB    Verb; 
    USHORT     UnknownVerbLength; 
    USHORT     RawUrlLength; 
    PCSTR     pUnknownVerb; 
    PCSTR     pRawUrl; 
    HTTP_COOKED_URL  CookedUrl; 
    HTTP_TRANSPORT_ADDRESS Address; 
    HTTP_REQUEST_HEADERS Headers; 
    ULONGLONG    BytesReceived; 
    USHORT     EntityChunkCount; 
    PHTTP_DATA_CHUNK  pEntityChunks; 
    HTTP_RAW_CONNECTION_ID RawConnectionId; 
    PHTTP_SSL_INFO   pSslInfo; 
}HTTP_REQUEST_V1, *PHTTP_REQUEST_V1; 

Я только что начал C#, так что вникаю в COM? программирование над моей головой.

И, смотря через ducumentation, я не могу видеть «запись» (под которой я имею в виду простую отправку байтов -> получение HTTP_REQUEST).

Anyhoo! если кто-то хочет указать мне в сторону какого-нибудь хорошего WINDOWS KERNEL MODE HTTP-СЕРВЕРОВ, ВКЛЮЧАЯ SSL, тогда чувствуйте себя свободно, это будет отличное чтение и что-то, что нужно учитывать в будущем.

+0

Я понимаю, что косяк «отливать» в традиционном/техническом смысле, но отражает класс HttpWebRequest и имеющий совать, кажется, что HttpWebRequest анализируется/создается из SerializationInfo WebRequest? его тоже над головой:/ – divinci

+0

Похожие вопросы - http://stackoverflow.com/questions/318506/converting-raw-http-request-into-httpwebrequest-object - http://stackoverflow.com/questions/743794/net -http-parser –

ответ

15

просто замените гнездо с помощью HttpListener. Он легко анализирует HTTP-запрос для вас.

Вот пример:

HttpListener listener = new HttpListener(); 
// prefix URL at which the listener will listen 
listener.Prefixes.Add("http://localhost:8080/"); 
listener.Start(); 
Console.WriteLine("Listening..."); 
while (true) 
{ 
    // the GetContext method blocks while waiting for a request. 
    HttpListenerContext context = listener.GetContext(); 
    HttpListenerRequest request = context.Request; 

    // process the request 
    // if you want to process request from multiple clients 
    // concurrently, use ThreadPool to run code following from here 
    Console.WriteLine("Client IP " + request.UserHostAddress); 

    // in request.InputStream you have the data client sent 
    // use context.Response to respond to client 
} 
+0

не ответ: / – divinci

3

Вы не можете наложить его на HttpWebRequest или что-нибудь в этом роде. Просто выбросьте Socket и используйте вместо этого HttpWebRequest. В противном случае вам придется вручную проанализировать ответ byte[].

6

Считаете ли вы использование класса HttpListener вместо сокета для приема входящих HTTP-запросов? Он будет давать HttpListenerRequest объектов вместо необработанных данных. Я нашел эти классы полезными для моделирования веб-сервера.

Смежные вопросы