使用HttpWebRequest/HttpWebResponse发出的HTTP请求和响应如何在Fiddler中显示

40

我可以如何使用 Fiddler 来捕获使用 .NET HttpWebRequest 和 HttpWebResponse 发送和接收的请求和响应?


也许我没有理解你的问题,但Fiddler是一个Web调试器(代理)。如果您的请求通过代理发送,它会捕获它。请描述一下您真正想要做什么。 - tuergeist
3个回答

42

这个问题的答案可以在 Fiddler FAQ 中找到。

你需要通过 Fiddler 路由你的 HTTP 流量(即使用 Fiddler 作为代理)。

以下是一些链接,可能会有所帮助:
Fiddler Web 调试 - 配置客户端

其中链接到这里:
通过 .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();

请查看此处,以获取WebProxy类的完整详细信息。

还需要注意Fiddler FAQ中提到的重要“警告”:

为什么我看不到发送到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适配器上的本地主机,或使用http://ipv6.fiddler来访问IPv6适配器上的本地主机。这对于Visual Studio测试Web服务器(代号: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的别名。


4
如有帮助,http://[代理地址和端口号]的默认值为http://127.0.0.1:8888,您可以在“工具”>“Fiddler选项”中检查/更改端口。 - Matt Kemp

11
如果您无法使用Fiddler,Wireshark是一种类似的工具,它可以在网络硬件层面上工作,因此可以捕获来自任何应用程序的网络流量。Wireshark比Fiddler更复杂、更普遍,但它是一个非常好用的工具,值得花费一些时间去了解。

@迷人的匿名投票者:你错过了我说“如果你不能”的那一部分吗?请原谅我试图提供帮助。 - RichieHindle
2
@Richie:我取消了那个踩的操作,因为我也不明白为什么要这样做。 - tuergeist

4
如果您能够修改请求URI,并且它是localhost,那么有一个更简单的解决方案:将主机名更改为localhost.fiddler
这不依赖于设置代理(无论是设置HttpWebRequest.Proxy还是在.config文件中的<defaultProxy>元素)。
(来自此问题的评论。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接