有什么方法可以将Fiddler挂钩来捕获使用.NET HttpWebRequest和HttpWebResponse发出的请求和响应?
答案 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://localhost或http://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的评论。)