加载和解析存储在文件中的 HTTP 响应

Loading and parsing an HTTP response that is stored in a file

我在本地存储了一个包含 http 请求响应的文件。它看起来像这样:

HTTP/1.1 200 OK
Accept-Ranges: bytes
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Origin: http://www.pokemon.com
Cache-Control: max-age=3600, public
Content-Type: image/png
Date: Tue, 19 Apr 2016 17:33:04 GMT
Etag: "2542947452"
Expires: Tue, 26 Apr 2016 17:33:04 GMT
Last-Modified: Wed, 04 Jun 2014 14:59:14 GMT
Server: ECAcc (dca/247E)
X-Cache: HIT
Content-Length: 335685

‰PNG


IHDR   õ  V   ±NÛ‘      pHYs     šœ    cHRM  z%  €ƒ  ùÿ  €é  u0  ê`  :˜  o’_ÅF ËIDATx ÿÿ  ÿâd  ÿ              ÿ    _   n ÿ #                ÿ      ÿ                          ÿ          ÿÿ    ÿ                              ÿ      ÿ                      ÿ          ÿ            ÿ        ÿ      ÿ            ÿ        ÿ                      ÿ          ÿ          ÿ    ÿ        ÿ                      ÿ                              ÿ                ÿ    ÿ                  

我需要提取该有效负载并将其存储在单独的文件中(在本例中为 png 文件) 我不知道如何将它加载到内存中,然后在 HttpWebResponse 或类似的程序中相应地解析它,因此我可以轻松访问属性。

我以为我可以使用 WebRequest.Create 打开文件,但我显然遗漏了其他东西,因为它只接受 url。有人可以给我一些提示吗?

如您所料,这是原始 HTTP 响应。 headers 后面有一个空行,剩下的就是实体 payload。如果将负载部分保存到一个文件,那将是一个 PNG,它应该是 335685 字节长(或者,换句话说,删除空白行和它上面的所有内容)。

有趣的问题,我花了一些时间 https://github.com/dotnet/runtime 研究 System.Net.Http HttpWebResponse 是如何创建的,但我看不到从流构建 HttpWebResponse 的简单方法。

Here 是创建和解析 HttpResponseMessage 的地方,它似乎与表示底层网络套接字的 SafeWinHttpHandle 紧密耦合,而不是 IO.Stream.

我看过的大多数测试用例都会构造一个响应,或者解析一行,而不是整个响应。

我认为重用 System.Net.Http 的响应解析器的最佳选择是创建一个 returns 文件的环回套接字。还有一个 HttpClient 来伪造请求。