Fiddler捕获模拟器的浏览器数据包,但不是我的应用程序

时间:2016-09-27 10:40:18

标签: android android-emulator fiddler

我已经在Fiddler网站中描述了here描述的每一步,用于捕获我的应用程序(在模拟器中运行)网络数据包。 奇怪的是,我可以解码从浏览器发送的http / https,但不能解析来自我应用的https数据包。请求获得成功响应更有趣!知道可能是什么问题吗?

我完全没库存,不知道我应该做些什么没有。

1 个答案:

答案 0 :(得分:1)

我在Xamarin论坛上找到的第一个主题是Why can't Fiddler detect traffic from Xamarin apps?。答案是设置DefaultWebProxy

    public override void OnCreate()
    {
        // get IP from fiddler's internet icon at the top right, or via ipconfig for VirtualBox used by Genymotion
        WebRequest.DefaultWebProxy = new WebProxy("192.168.56.1", 8888);
        base.OnCreate();
        ...
     }

我把它放在MainActivity中,但它并没有解决我的问题。

帮助我的是Debugging HttpClient Calls with fiddler in PCL

  

您需要更改代码才能使用HttpClientHandler和代理

HttpClientHandler handler = new HttpClientHandler () 
{
    Proxy = new WebProxy (new Uri("http://[Computer IP]:[Fiddler port number]")),
    UseProxy = true
};
using (var client = new HttpClient(handler))
{
    // Make your call in here
}
  

看起来很简单,只有PCL不会出于任何原因在其捆绑的System.Net dll中包含Web代理类,因此您需要通过扩展System.Net.IWebProxy接口来编写自己的代理类   像这样

public class WebProxy : System.Net.IWebProxy
{
    public System.Net.ICredentials Credentials
    {
        get;
        set;
    }

    private readonly Uri _proxyUri;

    public WebProxy(Uri proxyUri)
    {
        _proxyUri = proxyUri;
    }

    public Uri GetProxy(Uri destination)
    {
        return _proxyUri;
    }

    public bool IsBypassed(Uri host)
    {
        return false;
    }
}

完成所有这些后,我能够在Android模拟器上捕获来自我的Xamarin.Forms应用程序的请求。