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

Fun*_*ung 39 .net httpwebrequest fiddler httpwebresponse

有什么方法可以将Fiddler捕获到使用.NET HttpWebRequest和HttpWebResponse捕获请求和响应吗?

Cra*_*gTP 40

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>
Run Code Online (Sandbox Code Playgroud)

有关设置的完整详细信息,请参见此处<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();
Run Code Online (Sandbox Code Playgroud)

有关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适配器上的localhost,或使用http://ipv6.fiddler命中IPv6适配器上的localhost .这适用于Visual Studio测试Web服务器(代号:Cassini),因为测试服务器只侦听IPv4环回适配器.

最后,您可以自定义规则文件,如下所示:

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

...然后只需点击http:// myapp,它将作为127.0.0.1:8081的别名.

  • 如果它帮助任何人,http:// [您的代理地址和端口号]的默认值是http://127.0.0.1:8888,您可以在工具> Fiddler选项中检查/更改端口 (3认同)

Ric*_*dle 10

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

Wireshark比Fiddler更复杂,更通用,但它是你工具箱中的一个很好的工具,值得研究一下.

  • @Richie:我取消了反对票,因为我也不明白为什么。 (2认同)