fiddler 怎么监听HttpClient发送的请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fiddler 怎么监听HttpClient发送的请求相关的知识,希望对你有一定的参考价值。

参考技术A 直接打开fiddler2,然后操作你要抓post数据的页面,然后到fiddler2中,选中你抓的页面,然后在右边的TextView 选项卡里就能看到post的数据了啊,如果这个选项卡里数据是空,刚证明这个页面不是post数据的

如何使用 fiddler 或任何其他工具跟踪 HttpClient 请求?

【中文标题】如何使用 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 或任何其他工具跟踪 HttpClient 请求?

Fiddler抓取IDEA上用HttpClient发出的网络请求

fiddler怎么不监听本机的网络请求

HttpClient.SendAsync() 未将 JSON 作为字符串发送

通过Fiddler抓取Java HttpClient的HTTP包

Fiddler 没有看到来自 C# HttpClient() 的 API 调用