加载和解析存储在文件中的 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 来伪造请求。
我在本地存储了一个包含 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 来伪造请求。