【问题标题】:How to parse a raw HTTP response as HttpListenerResponse?如何将原始 HTTP 响应解析为 HttpListenerResponse?
【发布时间】:2010-05-11 07:44:27
【问题描述】:

如果我有一个原始的 HTTP 响应作为字符串:

HTTP/1.1 200 OK  
Date: Tue, 11 May 2010 07:28:30 GMT  
Expires: -1  
Cache-Control: private, max-age=0  
Content-Type: text/html; charset=UTF-8  
Server: gws  
X-XSS-Protection: 1; mode=block  
Connection: close

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

有没有一种简单的方法可以将其解析为HttpListenerResponse 对象?或者至少是某种 .NET 对象,这样我就不必处理原始响应。

我目前正在做的是提取标题键/值对并将它们设置在HttpListenerResponse 上。但是有些headers是不能设置的,然后我得把response的body剪掉,写到OutputStream。但是身体可以被压缩,或者它可以是一个图像,我还不能开始工作。有些响应到处都包含随机字符,这看起来像是编码问题。很麻烦。

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

【问题讨论】:

    标签: c# proxy httpresponse socks httplistener


    【解决方案1】:

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

    How to implement custom proxy server?

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

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

    【讨论】:

      【解决方案2】:

      也许您想看看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));
      

      请告诉我这不是您要搜索的内容。

      【讨论】:

      • 嗯,只是重新阅读您的问题,我认为如果您只是得到原始回复并且必须手动建立您的回复,这可能对您没有帮助......
      • 是的,我目前正在使用 HttpListenerResponse.Headers.Set(key, value),这是一回事。不过谢谢你的回复。
      猜你喜欢
      • 2020-10-04
      • 2012-02-13
      • 1970-01-01
      • 2017-12-28
      • 2016-06-20
      • 2011-10-10
      • 1970-01-01
      • 2012-10-26
      • 2011-06-08
      相关资源
      最近更新 更多