2010-05-11 8 views
6

Wenn ich eine HTTP-Antwort als String:Wie analysiert man eine rohe HTTP-Antwort als HttpListenerResponse?

HTTP/1.1 200 OK
Datum: Di, 11. Mai 2010 07.28.30 GMT
Gültig bis: -1
Cache-Control : privat, max-age = 0
Content-Type: text/html; charset = UTF-8
Server: gws
X-XSS-Schutz: 1; mode = Block
Anschluss: schließen

<!doctype html><html>...</html> 

Gibt es eine einfache Art, wie ich es in ein HttpListenerResponse Objekt analysieren kann? Oder zumindest irgendein Art .NET Objekt, also muss ich nicht mit rohen Antworten arbeiten.

Was ich gerade mache ist das Extrahieren der Header Schlüssel/Wert-Paare und setzen sie auf der HttpListenerResponse. Aber einige Header können nicht gesetzt werden, und dann muss ich den Körper der Antwort ausschneiden und es in den OutputStream schreiben. Aber der Körper könnte gezippt werden, oder es könnte ein Bild sein, an das ich noch nicht arbeiten kann. Und einige Antworten enthalten überall zufällige Zeichen, die wie ein Codierungsproblem aussehen. Es ist eine Menge Ärger.

Ich erhalte eine rohe Antwort, weil ich SOCKS verwende, um eine HTTP-Anfrage zu senden. Das Programm, an dem ich gerade arbeite, ist im Grunde genommen ein HTTP-Proxy, der Anfragen über einen SOCKS-Proxy weiterleiten kann, wie es Privoxy tut.

Antwort

1

Vielleicht möchten Sie am ResponseHeaders Eigenschaft des Webclient einen Blick nehmen:

WebClient wc = new WebClient(); 
wc.DownloadStringAsync(new Uri("http://www.foo.com")); 

WebHeaderCollection myWebHeaderCollection = myWebClient.ResponseHeaders; 

for (int i=0; i < myWebHeaderCollection.Count; i++)    
    Console.WriteLine ("\t" + myWebHeaderCollection.GetKey(i) + 
         " = " + myWebHeaderCollection.Get(i)); 

Bitte mir sagen, ob das ist nicht, was Sie für die Suche.

+1

Hmm, lese gerade deine Frage neu, und ich denke, das hilft dir vielleicht nicht, wenn du nur eine rohe Antwort bekommst und deine Antwort von Hand aufbauen musst ... –

+0

Ja, ich benutze gerade HttpListenerResponse.Headers.Set (Schlüssel, Wert), was das Gleiche ist. Aber danke für deine Antwort. – Edgar