如何使用 fiddler 或任何其他工具跟踪 HttpClient 请求?
Posted
技术标签:
【中文标题】如何使用 fiddler 或任何其他工具跟踪 HttpClient 请求?【英文标题】:How can I trace the HttpClient request using fiddler or any other tool? 【发布时间】:2014-03-19 08:39:32 【问题描述】:我正在使用 HttpClient 向我无权访问的 Web api 服务之一发送请求,并且我需要跟踪从客户端到达服务器的实际请求流。 有没有办法连接 Fiddler 来监听请求?
我正在使用 System.Net.Http.HttpClient 类发送请求。
更新:现在尝试改进这个问题,因为我无法得到我想要的东西。 我正在使用 .Net 客户端应用程序通过 HTTP 通道连接到托管在我自己的 IIS 上的 Web 服务。我之前使用托管在我的 IIS 上的网站完成了提琴手调试,并观察了我的浏览器和网站之间产生的流量。但是,当谈到由 .Net 客户端程序使用 HttpClient 类与 Web 服务通信时产生的流量,奇怪的是提琴手似乎无法利用该流量并且没有显示任何内容。 .Net HttpClient 是否绕过 WinInet API 连接到导致提琴手无法观看流量的服务?
【问题讨论】:
.NET 不使用 WinINET,Fiddler 也不在乎。 .NET 确实绕过了 localhost 的代理,这是我在回答中提到的一个因素。 【参考方案1】:如果您使用http://localhost:1234 之类的网址进行连接,请将其更改为http://localhost.fiddler:1234/,然后来自 HttpClient 的请求应该会在 Fiddler 中可见。
【讨论】:
而且原因似乎已经解释了here - 微软在他们的代码中插入了一个检查,如果它是“本地主机”,他们只是跳过代理,所以请求不会通过提琴手。【参考方案2】:一般来说,在您的应用程序之前启动 Fiddler 就足够了。到目前为止,您还没有解释您的尝试。
如果它不起作用,请阅读: http://fiddlerbook.com/fiddler/help/hookup.asp#Q-DOTNET 如果您的目标 URL 是 localhost 或 127.0.0.1,请阅读: http://fiddlerbook.com/fiddler/help/hookup.asp#Q-LocalTraffic 如果您的代码在 IIS 或 ASP.NET 中运行,请阅读: http://fiddlerbook.com/fiddler/help/hookup.asp#Q-IIS【讨论】:
我希望这将有助于了解我到目前为止所做的尝试。我已经尝试过使用 fiddler,但它没有捕获从我的 .net 控制台应用程序生成的任何流量,该应用程序使用 HTTPClient 类来访问托管在自定义端口上的服务器上的服务。 – dhruvin 刚刚 您需要阅读并按照我提供的说明进行操作,或者提供有关问题的更多详细信息以及您具体尝试过的内容。每天都有成千上万的开发者在您描述的场景中成功捕获流量。 嗨@Eric,我已经更新了我的问题,以便在我遇到问题的情况下更加具体。希望现在有助于澄清问题。 你还没有提供一个 URL,但我可以告诉你,你需要阅读这个:fiddlerbook.com/fiddler/help/hookup.asp#Q-LocalTraffic 来解决你的问题。 在提琴手中检查你的过滤器也是值得的。在意识到自己的错误之前,我浪费了太长时间。【参考方案3】:IIS 不使用 Internet 选项中的代理设置,因为它以不同的用户身份运行(默认为 ApplicationPoolIdentity
)。 @EricLaw 提供了good pointer 关于捕获 IIS/ASP.NET 流量的问题。
我没有将 IIS 配置为使用我的登录帐户,而是编辑 web.config
以强制 HTTPClient 使用代理,如下所示。
<configuration>
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy proxyaddress="http://127.0.0.1:8888"/>
</defaultProxy>
</system.net>
</configuration>
这里是detail of usage from MSDN。
【讨论】:
【参考方案4】:如果 .NET 应用程序正在您当前的用户帐户中运行,请在配置部分中添加以下内容:
<configuration>
<system.net>
<defaultProxy>
<proxy bypassonlocal="false" usesystemdefault="true" />
</defaultProxy>
</system.net>
</configuration>
注意:重要提示:无论其他设置如何,.NET 将始终绕过包含 localhost 的 URL 的 Fiddler 代理。因此,不要使用 localhost,而是将代码更改为引用机器名称。例如:
这个 URL 不会出现在 Fiddler 中:
http://localhost/X509SignCodeService/X509SigningService.asmx
这个 URL 会出现在 Fiddler 中:
http://mymachine/X509SignCodeService/X509SigningService.asmx
【讨论】:
【参考方案5】:对于那些对 .NET Core 应用程序有同样问题并使用 Fiddler 的人(应该也适用于其他工具,但还没有检查过)。
你需要知道 Fiddler 监听的端口:
然后运行(在 Windows 上以管理员身份):
netsh winhttp set proxy 127.0.0.1:<the port>
要删除代理,请运行:
netsh winhttp reset proxy
你可以找到智慧的源泉here。 适用于本地主机。
【讨论】:
【参考方案6】:使用HttpTracer - a library built to capture Http requests/responses。您不需要配置代理,就像将处理程序的实例传递给 HttpClient 一样简单:new HttpClient(new HttpTracerHandler())
。试试吧,它对我们在 Xamarin 方面和在 ASP.NET 中的 S2S 目的来说非常宝贵。
【讨论】:
通过“专门为此目的构建”,我认为应该明确指出它不是专门为解决 Fiddler 问题而构建的,而是提供一种跟踪调用和公开给开发者的 HTTP 元数据【参考方案7】:对 IIS 的所有请求都记录在日志目录中(iis manager > iis server > logging) 默认为: %SystemDrive%\inetpub\logs\LogFiles
在行尾是请求的状态。
【讨论】:
以上是关于如何使用 fiddler 或任何其他工具跟踪 HttpClient 请求?的主要内容,如果未能解决你的问题,请参考以下文章
Fiddler是最强大最好用的Web调试工具之一--网站抓包分析
如何使用 Fiddler 通过聊天检测 Facebook 好友 IP