Alireza Farahani
Alireza Farahani

Reputation: 2539

Fiddler capturing emulator's browser packets but not my app's

I've taken every step described here in Fiddler site for capturing my application (running in emulator) network packets. The strange thing is that I can decode http/https sent from browser but not https packets from my app. It's more interesting that requests get successful responses! Any idea what might be the problem?

I'm completely stocked and have no idea what should I have done which didn't.

Upvotes: 3

Views: 546

Answers (1)

Yehor Hromadskyi
Yehor Hromadskyi

Reputation: 3388

First topic, that I've found on Xamarin forum was Why can't Fiddler detect traffic from Xamarin apps?. The answer is to set 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();
        ...
     }

I put it in MainActivity, but it didn't solve my problem.

Which helped me is Debugging HttpClient Calls with fiddler in PCL:

You will need to change your code to use a HttpClientHandler and a proxy

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
}

Looks simple enough only PCLs dont include the Web proxy class in its bundled System.Net dll for whatever reason so you will need to write your own by extending the System.Net.IWebProxy interface like so

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;
    }
}

After all this stuff, I was able to capture requests from my Xamarin.Forms app on Android Emulator.

Upvotes: 1

Related Questions