【发布时间】:2016-09-27 10:40:17
【问题描述】:
我已经采取了 Fiddler 站点中描述的每个步骤 here 来捕获我的应用程序(在模拟器中运行)网络数据包。 奇怪的是,我可以解码从浏览器发送的 http/https,但不能解码来自我的应用程序的 https 数据包。更有趣的是请求得到成功的响应!知道可能是什么问题吗?
我完全有货,不知道我应该做什么而没有做什么。
【问题讨论】:
标签: android android-emulator fiddler
我已经采取了 Fiddler 站点中描述的每个步骤 here 来捕获我的应用程序(在模拟器中运行)网络数据包。 奇怪的是,我可以解码从浏览器发送的 http/https,但不能解码来自我的应用程序的 https 数据包。更有趣的是请求得到成功的响应!知道可能是什么问题吗?
我完全有货,不知道我应该做什么而没有做什么。
【问题讨论】:
标签: android android-emulator fiddler
我在 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 应用程序的请求。
【讨论】: