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

时间:2010-05-11 07:44:27

标签: c# proxy httpresponse socks httplistener

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

  

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

How to implement custom proxy server?

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

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

答案 1 :(得分:1)

也许您想看一下Webclient的{​​{3}}属性:

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

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