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