1

所以我有一个应用程序正在缓存本地文件,其中包含如下代码:

Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session oS)
{
    if (oS.url.StartsWith("foo.com/"))
    {
        oS.utilCreateResponseAndBypassServer();
        oS.oFlags["x-replywithfile"] = Path.GetFullPath(oS.url.Replace("foo.com/", "serve/"));
    }
}

这适用于任何 < 2GB 的文件。超过 2GB 我得到错误:

Fiddler - The requested file could not be read. The file is too long. This operation is currently limited to supporting files less than 2 gigabytes in size.   

我在内部假设 Fiddler 正在使用类似的东西File.ReadAllBytes,因为 int 的最大大小限制为 2gb。据我所知,没有 FiddlerCore 的源代码可以打开它并更改它......有人知道如何解决这个限制吗?

4

1 回答 1

1

很酷的场景。

是的,不幸的是,.NET Framework 固有地将所有对象限制为 2GB 大小,因此早期版本的 AutoResponder无法返回超过 2GB 的响应。更新: Fiddler 2.4.9.4 及更高版本自动检测大文件;任何X-ReplyWithFile超过 262 兆字节(fiddler.memory.DropIfOver首选项)的正文都将从客户端流式传输,而不是存储在内存中。

可以使用 Fiddler 将HTTP/307重定向返回到不同的网络服务器并在那里托管巨大的文件。

您的事件处理程序还可以使用该方法将文件的字节以块的形式直接流式传输到客户端(不使用 x-replywithfile 功能)oSession.oRequest.pipeClient.Send,但这会涉及大量代码。

于 2013-11-15T23:03:55.757 回答