2009-06-09 7 views
5

私はHTTP要求を受信して​​いるソケットがあります。どのようにソケットの受信バイト[]のから.NET HttpWebRequestクラスを作成

私はソケットからバイト[]形式で生のhttp要求を持っています。

私はこの要求を勉強しなければならない

- 代わりに車輪の再発明の

は - 私はこのバイトSystem.Net.HttpWebRequestに配列または似たような「キャスト」することができますか?

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

とにかく、私は答えを見つけることができませんでした。私はそれが中で呼び出す機能によって行うことができると思いますけれどもさらに少し掘って:

HttpApi.dll私は興味深い構造がHTTP_REQUEST

ある

HttpWebRequestのは、このDLLを使用していることを考える(winxpsp2)

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!もし誰かがSSLを始めとするいくつかの素敵なWINDOWSカーネルモードHTTPサーバーの方向に私を指し示したいのであれば、それは素晴らしい読書であり、将来のために考慮すべきことであると自由に感じてください。

+0

:ここ

は一例ですWebRequestのSerializationInfo?そのあまりにも私の頭の上:/ – divinci

+0

同様の質問 - http://stackoverflow.com/questions/318506/converting-raw-http-request-into-httpwebrequest-object- http://stackoverflow.com/questions/743794/net -http-parser –

答えて

15

HttpListenerを使用してSocketを置き換えてください。あなたのためにHTTPリクエストを簡単に解析します。私は伝統的/技術的な意味での「キャスト」が、HttpWebRequestクラスを反映して、HttpWebRequestのは/解析さから作成されたものと思わ突く持つ傾けることを理解

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

着信HTTPリクエストを受信するソケットの代わりにHttpListenerクラスを使用することを検討しましたか?生データの代わりにHttpListenerRequestオブジェクトが生成されます。私は、これらのクラスがWebサーバーをシミュレートするのに役立つことを発見しました。

関連する問題