40

有什么方法可以让 Fiddler 捕获使用 .NET HttpWebRequest 和 HttpWebResponse 发出的请求和响应?

4

3 回答 3

42

Fiddler FAQ 给出了答案。

您基本上通过 Fiddler 路由您的 HTTP 流量(即使用 Fiddler 作为代理)。

以下是一些有用的链接:
Fiddler Web Debugging - 配置客户端

反过来链接到这里:
Take the Burden Off Users with Automatic Configuration in .NET

您可以通过 web.config 文件(对于 ASP.NET 应用程序)中的一些配置设置来实现这一点,如下所示:

<system.net>
  <defaultProxy>
    <proxy
      proxyaddress="http://[your proxy address and port number]"
      bypassonlocal="false"
    />
  </defaultProxy>
</system.net>

有关设置的完整详细信息,请参见此处<defaultProxy>

或者,您可以在代码中使用 WebProxy 对象,例如:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("[ultimate destination of your request]");
WebProxy myproxy = new WebProxy("[your proxy address]", false);
request.Proxy = myproxy;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse) request.GetResponse();

这里

另请注意 Fiddler 常见问题解答中提到的重要“警告”:

为什么我看不到发送到http://localhosthttp://127.0.0.1的流量?
IE7 和 .NET Framework 被硬编码为不通过任何代理发送对 Localhost 的请求,并且作为代理,Fiddler 不会接收此类流量。

解决方法是使用您的机器名作为主机名,而不是使用 Localhost 或 127.0.0.1。因此,例如,与其点击 http://localhost:8081/mytestpage.aspx,不如访问 http://machinename:8081/mytestpage.aspx

...或者,如果您使用 Fiddler v2.1.8 或更高版本,只需使用http://ipv4.fiddler 在 IPv4 适配器上访问 localhost,或使用http://ipv6.fiddler在 IPv6 适配器上点击 localhost . 这对 Visual Studio 测试网络服务器(代号:Cassini)特别有效,因为测试服务器只侦听 IPv4 环回适配器。

最后,您可以像这样自定义您的规则文件:

    static function OnBeforeRequest(oSession:Fiddler.Session)
    {
      if (oSession.HostnameIs("MYAPP"))
      {
        oSession.host = "127.0.0.1:8081";
      }
    }  

...然后只需点击http://myapp,它将充当 127.0.0.1:8081 的别名。

于 2009-09-24T09:53:40.680 回答
11

如果你不能,Wireshark是一个在网络硬件级别工作的类似工具,因此它可以捕获来自任何应用程序的网络流量。

Wireshark 比 Fiddler 复杂一点,也更通用,但它是您工具箱中的一个很好的工具,值得花点时间研究。

于 2009-09-24T09:31:03.877 回答
4

如果您能够修改请求 URI,localhost那么有一个更简单的解决方案:将主机名更改为localhost.fiddler.

这不依赖于设置代理(无论是设置HttpWebRequest.Proxy还是文件<defaultProxy>中的元素.config)。

(来自对此问题的评论。)

于 2014-09-16T15:45:30.260 回答