【问题标题】:Fiddler not capturing traffic from .Net CoreFiddler 未从 .Net Core 捕获流量
【发布时间】:2018-12-15 16:08:10
【问题描述】:

我有一个控制台应用程序,它通过最初编写为在 .Net 框架下运行的 HTTP/HTTPS 调用许多第 3 方服务。 Fiddler 可以在该版本的应用中正常工作,捕获所有 HTTP 和 HTTPS 流量。

我将应用程序移植到 .net Core 2.1,现在 Fiddler 不会从应用程序捕获任何 HTTP/HTTPS 流量。

关于为什么 Fiddler (v5.0) 无法从 .Net Core 应用程序捕获流量的任何建议?

【问题讨论】:

    标签: c# https .net-core fiddler


    【解决方案1】:

    在我的办公环境中,Fiddler 仍然不会拦截 .NET Core 2.2 针对外部资源发出的请求。我猜这是由于我们的本地代理设置造成的。

    我的解决方法是通过将 Fiddler 显式定义为 HttpClient 类使用的代理来捕获来自 .NET Core 2.2 的请求:

            var httpClient = new HttpClient(
               handler: new HttpClientHandler
               {
                   // 8888 = Fiddler standard port
                   Proxy = new WebProxy(new Uri("http://localhost:8888")),  
                   UseProxy = true
               }
            );
    

    这可靠地将来自 Core 的所有请求通过 Fiddler 传输。

    【讨论】:

    • @Mahesh:无论您在何处使用 HttpClient 访问在线资源,都可以使用此代码对其进行实例化。然后它将使用 Fiddler 作为其所有请求的代理。为此,Fiddler 必须作为代理运行。否则请求将不会得到答复并会超时。
    【解决方案2】:

    在 .NET Core 2.1 中,默认提供程序从 WinHttpHandler 更改为新的 SocketsHttpHandler,完全建立在 .NET 网络堆栈之上。

    https://github.com/dotnet/corefx/issues/28603 表示 Fiddler 应该可以工作,因此请确认您拥有 2.1 的最新更新,如果仍然无法正常工作,请在 github 上向 corefx 报告问题。

    【讨论】:

      【解决方案3】:

      少量添加。如果将HttpClientFactory 与 DI 一起使用,则可以这样设置代理

      services.AddHttpClient<ISomeService, SomeService>()
          .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler()
          {
              Proxy = new WebProxy(new Uri("http://localhost:8888")),
              UseProxy = true
          });
      

      【讨论】: