2010-05-11 24 views
6

Ben bir dize olarak ham HTTP yanıtı varsa:Ham HTTP yanıtı HttpListenerResponse olarak nasıl ayrıştırılır?

HTTP/1.1 200 OK
Tarih: Sal, 11 Mayıs 2010 07:28:30 GMT
geçerlilik tarihi: -1
Cache-Control : özel, en yüksek yaş = 0
İçerik Türü: text/html; charset = UTF-8
Sunucu: gws
X-XSS Koruması: 1; mode = blok
Bağlantı:

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

Bir HttpListenerResponse nesne ayrıştırmak kolay bir yolu var mı yakın? Ya da en azından bir tür .NET nesnesi bu yüzden ham yanıtlarla çalışmak zorunda değilim.

Şu an yaptığım şey, başlık anahtar/değer çiftlerini ayıklamak ve bunları HttpListenerResponse'ye ayarlamaktır. Ancak bazı başlıklar belirlenemez ve sonra cevabın gövdesini kesip OutputStream'e yazmam gerekir. Ama beden gzip olabilir, ya da henüz işe yaramayacak bir görüntü olabilirdi. Ve bazı yanıtlar her yerde bir kodlama problemine benzeyen rastgele karakterler içeriyor. Bu çok sıkıntı.

Ham yanıt alıyorum çünkü bir HTTP isteği göndermek için SOCKS kullanıyorum. Üzerinde çalıştığım program temel olarak, Privoxy gibi bir SOCKS proxy'si aracılığıyla istekleri yönlendirebilen bir HTTP proxy'si.

cevap

1

Belki Webclient ait ResponseHeaders özelliğine bakmak istiyorum: o isnt ne araması yaptığını

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)); 

söyle.

+1

Hmm, sorunuzu tekrar gözden geçirin, ve eğer sadece ham bir yanıt alırsanız ve cevabınızı el ile oluşturmanız gerekiyorsa size yardımcı olmayabilir ... –

+0

Evet, şu anda HttpListenerResponse.Headers.Set kullanıyorum. aynı şey olan anahtar, değer). Ama cevabın için teşekkürler. – Edgar