如何使用Fiddler调试任何应用程序(例如C#/WPF应用程序)的流量

40
我正在尝试调试我的HTTP请求,源自SO上的另一个问题。所以我读了一些关于Fiddler的内容,并想使用它来调试我的问题。但是我似乎无法让来自我的WPF应用程序的流量经过Fiddler。我相信我需要配置代理。我正在使用WebClient进行基本示例,但我认为以后我需要使用WebRequest。但现在,对于一个简单的WebClient,我该如何让它通过Fiddler(我相信我必须将代理设置为localhost:8888)? 更新:

我不知道我是否做了正确的事情,但我尝试了

var wc = new WebClient();
WebProxy proxy = new WebProxy();
proxy.Address = new Uri("http://localhost:8888");
wc.Proxy = proxy;

但失败了 - 我在Fiddler中看不到任何流量

我尝试了...

var wc = new WebClient();
WebProxy proxy = new WebProxy("127.0.0.1", 8888);
wc.Proxy = proxy;

仍然没有任何东西


1
只是为了澄清一下,您试图将HTTP请求发送到哪个URL? - EricLaw
我试图上传到本地主机,这是我的问题,然后我从fiddler文档中发现我将无法看到来自本地主机的流量。 - Jiew Meng
5个回答

55

我在这个fiddler2.com页面找到了解决方案。

为什么我看不到发送到http://localhosthttp://127.0.0.1的流量?

Internet Explorer和.NET Framework已经硬编码,不会通过任何代理服务器发送Localhost的请求,作为代理服务器,Fiddler将无法接收此类流量。

最简单的解决方法是使用您的计算机名称作为主机名,而不是Localhost或127.0.0.1。因此,例如,不要访问http://localhost:8081/mytestpage.aspx,而是访问http://machinename:8081/mytestpage.aspx


13
IIS Express无法接收到来自http://machinename/的流量,因此建议将其路由到http://localhost.fiddler/。更多信息请参考http://fiddler2.com/documentation/Configure-Fiddler/Troubleshooting/400ErrorFromIIS。 - robrich
1
它对我有效。在我的控制台应用程序中,我调用了一个部署在我的开发计算机上的IIS7.5 Web服务。我只是用我的计算机名称替换了“localhost”,然后Fiddler就可以捕获到流量了。 - york

16

3
我认为这个不再起作用了。但您可以使用 http://localhost.fiddler/ 来使其起作用。 - Rick Strahl

15

你可以在以下帖子中找到答案:https://dev59.com/vW445IYBdhLWcg3w7uc0#7506427

它列出了你需要将以下内容添加到你的 web.config 或 App.Config 中。

<system.net>
  <defaultProxy>
    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>
  1. 在同一台机器上启动应用程序和 Fiddler。
  2. 点击工具 | Fiddler 选项 => 连接 => 调整端口为 8888。(如果需要允许远程连接)
  3. 好了,然后从文件菜单中捕获流量。

就这些,但别忘了在关闭 Fiddler 后删除 web.config 中的行,因为如果不这样做,会出现错误。


针对 DotNet Core 请求运行 Fiddler

运行 .net core 的 Fiddler 需要使用 "Netsh" 工具 https://learn.microsoft.com/en-us/windows-server/networking/technologies/netsh/netsh-contexts)

添加代理的命令:

netsh winhttp set proxy 127.0.0.1:8880
运行代理后,将Fiddler代理设置为相同的端口,然后享受它。 enter image description here 移除代理。
netsh winhttp reset proxy

参考: http://fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy https://docs.telerik.com/fiddler/configure-fiddler/tasks/configuredotnetapp


4

我经常使用以下配置来将网络HTTP调用重定向到我的应用程序中的fiddler代理。

这适用于所有种类的.NET应用程序(具有web.configapp.config文件),在fiddler中最好禁用Capture Traffic选项,以避免捕获所有正在运行的应用程序的通用流量。 快捷键为F12

<system.net>
    <defaultProxy>
        <proxy proxyaddress="http://localhost:8888/" />
    </defaultProxy>
</system.net>

这是一个有价值的配置,如果您有第三方程序集,而且您没有机会更改调用URL的代码,那么这个配置就非常实用。
希望这对某些人有所帮助。

由于某些原因,这在我的WPF应用程序中无法工作。我必须手动强制它使用代理。 - rollsch

1
"IIS Express无法接收到machinename的流量,因此需要路由到localhost.fiddler fiddler2.com/documentation/Configure-Fiddler/Troubleshooting/… - robrich于2013年5月9日6:02发表。" "上面的RobRich说得对。 这是唯一能够使用IIS Express的方法。"

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