【问题标题】:How to capture HTTP traffic from intermediary Web API service?如何从中间 Web API 服务捕获 HTTP 流量?
【发布时间】:2013-04-02 01:56:54
【问题描述】:

这是我目前的设置:

客户端应用程序 -----> 中间 Web API 服务(接收来自客户端的调用)------> 3rd 方 RESTful 服务(接收来自中间服务的调用)

因此,如果我从客户端发起调用到中介服务调用从中介服务发起到第 3 方服务,我可以使用 Fiddler 或 Wireshark检查 POSTed XML/JSON。

问题是当我一直从客户端进行调用时,我想检查从 中间服务 发送到第 3 方服务的实际原始 HTTP 传出消息。如果我在包含中间服务的服务器上运行 Fiddler,我看不到 HTTP 流量从它出站。我也尝试过 Wireshark,但它也不会占用流量。但是我知道它正在发生,因为第 3 方服务将错误发回给我。

中介服务充当客户端应用程序对第​​ 3 方服务的门面,并在使另一个 HTTP 客户端出站到第 3 方服务之前处理来自客户端的数据。我在第 3 方服务接受传出消息时遇到问题,并且确实需要看到中间服务省略了原始 HTTP 消息(我使用HttpClient.PostAsync 将数据发布到第 3 方服务) .我已经在发送之前将其保存到数据库中,但我提取的内容似乎还可以。

所以主要问题是,我如何获得我的中介服务正在向 3rd 方服务发布的消息?我可以使用 Fiddler、Wireshark 或其他程序来检查从该中间服务出站的 HTTP 消息吗?

【问题讨论】:

    标签: debugging rest asp.net-web-api fiddler wireshark


    【解决方案1】:

    配置您的“中间 Web API 服务”以通过在同一(或不同)计算机上运行的 Fiddler 实例代理其流量,这将正常工作。

    如果您的服务是用 .NET 编写的,您可以手动配置其代理:http://www.fiddler2.com/fiddler/help/hookup.asp#Q-DOTNET,或者您可以更新 machine.config 或 web.config:http://www.telerik.com/automated-testing-tools/blog/eric-lawrence/13-01-08/capturing-traffic-from-net-services-with-fiddler.aspx,以便其流量通过 Fiddler 实例。

    【讨论】:

    • 这很好 - <proxy autoDetect="false" bypassonlocal="false" proxyaddress="http://127.0.0.1:8888" usesystemdefault="false" />
    【解决方案2】:

    我认为 Fiddler 不会起作用,因为它只会拦截在浏览器中进行的调用。你可以对你的中间代码进行修改吗?您可以注入一个处理程序来记录用于调用第三方服务的 HttpClient 中的消息。处理程序看起来像这样,

    public class LogginHandler : DelegatingHandler
    {
        public LogginHandler(HttpMessageHandler inner)
            : base(inner)
        {
        }
    
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
                using (var fs = new FileStream("c:\\temp\\log.txt", FileMode.Create, FileAccess.Write))
                {
                    await request.Content.CopyToAsync(fs);
                }
    
                return await base.SendAsync(request, cancellationToken);
    
        }
    }
    

    以及在这样的 HttpClient 实例中注入此处理程序的代码,

    HttpClient client = new HttpClient(new LogginHandler(new HttpClientHandler()));
    

    【讨论】:

    • 这是一个很好的建议,我认为它会奏效。现在我正在服务器上安装 VS.NET 以直接运行代码,以便我可以在浏览器中启动它并从 Fiddler 捕获流量。如果这可行,这将是理想的。
    • Fiddler 可以很好地捕获来自任何 HTTP/HTTPS 客户端(包括非浏览器客户端)的流量。
    • @EricLaw - 我正在阅读这篇文章,答案中的配置是必需的,所以 Fiddler 会接收所有流量吗? stackoverflow.com/questions/4428680/… 我也尝试了 Microsoft 网络监视器,但我刚刚意识到我看不到我正在发送的安全 HTTPS 消息的有效负载。传出的 HTTPS 负载是我感兴趣的检查。
    猜你喜欢
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多