2009-06-09 16 views
5

HTTP istekleri alan bir soketim var.Bir Soket'in alınan baytından .NET HttpWebRequest sınıfı oluşturma [] 'yı

Soketimden bayt [] formunda ham bir http isteği var.

bu talebi incelemek zorunda

- AMA yerine tekerleği yeniden keşfetmek

- Ben bu bayt bir System.Net.HttpWebRequest içine dizi veya benzeri bir şey 'döküm' olabilir?

----- GÜNCELLEME ---------

Neyse ben cevabını bulamadık. biraz daha kazma derken içeri fonksiyonlarını çağırarak yapılabilir düşünüyorum gerçi: (WinXPSP2)

Ben HttpWebRequest bu dll kullanan düşünüyorum HttpApi.dll

ilginç yapı HTTP_REQUEST

olduğunu
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; 

Sadece C# 'yı başlatmak için yeni başladım. Programlama kafamın üzerinde.

Dermentasyona baktığımda, bir 'giriş' göremiyorum (bunun için basit bir gönderen bytes-> HTTP_REQUEST değerini aldım).

Anyhoo! Eğer kimsenin bana SSL dahil olmak üzere bazı güzel WINDOWS KERNEL MODE HTTP HİZMETLERİ yönünü işaret etmek istiyorsa, o zaman büyük bir okuma ve gelecek için düşünecek bir şey olacağını hissediyorum.

+0

: Burada

bir örnektir Bir WebRequest'in SerializationInfo? başıma çok fazla:/ – divinci

+0

Benzer sorular - http://stackoverflow.com/questions/318506/converting-raw-http-request-into-httpwebrequest-object - http://stackoverflow.com/questions/743794/net -http-parser –

cevap

15

yalnızca Socket'i HttpListener kullanarak değiştirin. Sizin için HTTP isteğini kolayca ayrıştırır. Ben geleneksel/teknik anlamda 'dökme', ancak HttpWebRequest sınıfı yansıtan ve bir o HttpWebRequest/çözümlenen oluşturulur görünüyor karıştırmak zorunda sen cant anlamak

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

cevabı değil: / – divinci

3

HttpWebRequest ya da benzeri bir şeye atayamazsınız. Sadece Socket'u atın ve yerine HttpWebRequest kullanın. Aksi halde, byte[] yanıtını manuel olarak ayrıştırmanız gerekir.

6

Gelen HTTP isteklerinizi almak için soket yerine HttpListener sınıfını kullanmayı düşündünüz mü? Ham veri yerine HttpListenerRequest nesneler verecektir. Bir web sunucusunu simüle etmek için bu sınıfları yararlı buldum.