Fiddler无法捕获来自.Net Core的流量

17
我有一个控制台应用程序,通过HTTP/HTTPS调用多个第三方服务,最初是在.Net Framework下编写的。Fiddler可以与该版本的应用程序正常工作,并捕获所有的HTTP和HTTPS流量。
我将该应用程序移植到了.Net Core 2.1,现在Fiddler无法捕获从该应用程序产生的任何HTTP/HTTPS流量。
对于Fiddler(v5.0)无法从.Net Core应用程序中捕获流量的原因,您有什么建议吗?
3个回答

16
在我的办公环境中,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
           }
        );

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


@Mahesh:无论您在何处使用HttpClient访问在线资源,都可以使用此代码进行实例化。然后它将使用Fiddler作为所有请求的代理。为了使其正常工作,Fiddler必须作为代理运行。否则,请求将得不到回答并超时。 - Jpsy

7
在.NET Core 2.1中,默认提供程序已从WinHttpHandler更改为全新的SocketsHttpHandler,完全构建在.NET网络堆栈上。 https://github.com/dotnet/corefx/issues/28603表明Fiddler应该可以正常工作,请确保您已经升级到最新的2.1版本。如果仍然无法正常工作,请在Github上向corefx报告问题。

5

小小的补充。在使用 HttpClientFactory 和 DI 时,可以通过以下方式设置代理。

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

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