使用HttpWebRequest / HttpWebResponse获取HTTP请求和响应以在Fiddler中显示

时间:2009-09-24 09:28:29

标签: .net httpwebrequest fiddler httpwebresponse

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

3 个答案:

答案 0 :(得分:40)

Fiddler FAQ给出了答案。

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

以下是一些有用的链接:
Fiddler Web Debugging - Configuring Clients

反过来链接到这里:
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>设置的完整详情,请参阅here

或者,您可以使用以下内容在代码中使用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类的完整详细信息,请参阅here

还要注意提琴手常见问题解答中提到的重要“警告”:

  

为什么我看不到发送到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测试网络服务器(代号:   卡西尼)因为只有测试服务器   侦听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。

答案 1 :(得分:10)

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

Wireshark比Fiddler更复杂,更通用,但它是一个很棒的工具,可以在你的工具箱中使用,值得研究一下。

答案 2 :(得分:4)

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

这与设置代理无关(无论是在HttpWebRequest.Proxy文件中设置<defaultProxy>还是.config元素。)

(来自对this question的评论。)