为什么Http请求Fiddler的速度非常快

Ehs*_*san 17 .net c# httprequest fiddler

我在c#中编写了一个用于抓取网站的多线程程序,但是当我在后台启动Fiddler时,请求的速度提高了12倍,这对我来说真的很奇怪,当我关闭Fiddler时,下载速度会降低.怎么可能请帮助,(我的连接到ineternet和Fiddler没有代理设置)如果我可以在我的应用程序中注入fiddler的性能,那将是非常好的,任何解决方案?幕后有什么魔力?:)

谢谢

v.s*_*nko 25

原因是使用Fiddler时忽略的http连接数量的限制.

我在使用System.Net.Http.HttpClient执行多个(~80)并发请求时遇到了相同的行为.随着Fiddler的运行,所有请求都完成得更快.保持活力当然是有效的.

我用Wireshark来看看发生了什么,我首先注意到http流量的方式是不同的.随着Fiddler的请求被一次性抛出,之后响应也很好地分组.没有Fiddler,请求与响应交错.

其次,tcpview显示我的代码没有Fiddler只创建了2个到服务器的TCP连接.随着Fiddler的开始,连接数量急剧增加.从我的应用程序到Fiddler,然后从Fiddler到服务器,有数十个.

众所周知,http标准建议http连接的数量不应超过2,并且似乎限制是作为http客户端中的默认设置实现的.

在.NET应用程序中,我们可以使用ServicePointManager.DefaultConnectionLimit静态属性控制限制.作为一项实验,将其设置为100会使请求在使用或不使用Fiddler的情况下执行相同的速度.

该设置也可以通过app.config控制:

    <system.net>
    <connectionManagement>
        <add address="*" maxconnection="100" />
    </connectionManagement>
</system.net>
Run Code Online (Sandbox Code Playgroud)

现在,为什么使用Fiddler时不遵守默认连接限制?当http客户端使用代理并且Fiddler确实充当代理时,结果限制是不同的.除了这篇旧文章之外,我没有找到有关代理连接限制的更多信息.


Cod*_*ter 11

你能展示一些示例代码,以便人们可以确认吗?否则它会变得疯狂猜测.

我最好的猜测:Fiddler 使用keepalive,这将省去一遍又一遍打开连接的麻烦.您可以通过禁用这两个确认这一点Reuse client connectionsReuse connections to servers:如果它再像往常一样(或更慢)慢,好处是从保持连接活着上涨.

  • 这是正确的答案.您的客户端应用程序可能会在每次请求时拆除其连接,但Fiddler保持与服务器的连接.您的应用为每个请求建立了与Fiddler的新连接,但由于它是本地请求,因此它基本上是即时的.您需要在客户端应用程序中的HTTPWebRequest上启用KeepAlive属性. (3认同)