如何将原始HTTP响应解析为HttpListenerResponse?

如果我将原始HTTP响应作为字符串:

HTTP / 1.1 200好的
日期:2010年5月11日星期二07:28:30 GMT
过期:-1
Cache-Control:private,max-age = 0
Content-Type:text / html; 字符集= UTF-8
服务器:gws
X-XSS-Protection:1; 模式=块
连接:关闭

... 

有没有一种简单的方法可以将它解析为HttpListenerResponse对象? 或者至少是某种.NET对象,所以我不必使用原始响应。

我目前正在做的是提取标题键/值对并在HttpListenerResponse上设置它们。 但是有些头文件无法设置,然后我必须剪切响应的主体并将其写入OutputStream。 但身体可以被gzipped,或者它可能是一个图像,我还无法工作。 并且一些响应在任何地方都包含随机字符,这看起来像编码问题。 这很麻烦。

我正在获得原始响应,因为我正在使用SOCKS发送HTTP请求。 我正在处理的程序基本上是一个HTTP代理,它可以通过SOCKS代理路由请求,就像Privoxy那样。

看起来没有简单的方法来转换它们。 这些文章帮助:

如何实现自定义代理服务器?

http://www.jeffcrossman.com/2009/08/27/using-httplistener-to-build-a-proxy

我最终做了一些非常相似的事情。

也许你想看一下Webclient的ResponseHeaders属性:

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

如果那不是您要搜索的内容,请告诉我。