我想保存 http 响应的“块”,最好使用 curl 或其他可以在 mac 或 linux 上运行的免费命令行工具,但我愿意接受任何类型的解决方案。
例如,如果响应以 10 个块的形式发送,我想将每个块保存到单独的文件中,chunk1.txt
->chunk10.txt
当然,如果文件以单个块的形式发送,那么该文件将被保存到单个文件中。
如何使用 curl 或其他工具保存 http 响应块?
编辑:我想“查看”这个来验证它Transfer-Encoding: chunked
是否正在提供 1-N 个块,并且Content-Length:XXX
正在发送单个响应。我想将它们保存到文件中是没有必要的。如果在单个文件中清楚地注明每个块是什么,那就太好了!
答案1
tcpdump是 Wireshark 和其他类似实用程序的基础,并且具有可以实现您想要的命令行界面。类似于以下命令:
tcpdump -A -i en0 src XXX.YYY.ZZZ.AAA and port 80
会将通过XXX.YYY.ZZZ.AAA
端口的所有原始数据包转储到控制台。您可以消除任何接口的 ,并且表达式是相当可配置的。80
en0
-i en0
你可以找到一些很好的例子howtoing.com 网站和danielmiessler.com。
虽然您可以使用此解决方案保存整个捕获,但它不会按照您的要求将块保存在不同文件中。您必须对转储文件进行后处理才能获得它。
[澄清] 您将curl
在捕获数据包的同时在单独的终端中运行。
[补充] 还有关于Wireshark 和 http 分块这可能会有用。还有这个重新组合 pcap 跟踪以恢复 http 级别数据问题有一个可接受的解决方案,使用重新解析捕获兄弟。
答案2
您可以使用以下实用程序Wireshark,这通常是Linux上的标准包。
Wireshark 允许深入检查所有 TCP/IP 协议级别的消息和协议,并提供许多复杂的工具。
您可以使用 Wireshark 显示消息字节流或转到协议级别并显示更高级别的抽象。
您感兴趣的部分称为 数据包重组, 被形容为 :
网络协议经常需要传输大量完整的数据,例如传输文件时。底层协议可能无法处理该数据块大小(例如网络数据包大小的限制),或者像 TCP 一样基于流,它根本不了解数据块。
在这种情况下,网络协议必须自己处理块边界,并(如果需要)将数据分散到多个数据包中。显然,它还需要一种机制来确定接收端的块边界。
Wireshark 将此机制称为重组,尽管特定协议规范可能对此使用不同的术语(例如,取消分段、碎片整理等)。
重组可能发生在几个协议层,因此“数据包字节”窗格中可能会出现多个选项卡。
一旦您可以看到这些块,您也可以导出它们。
以下是带有重新组合选项卡的“数据包字节”窗格的示例: