Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Emulator连接隧道缺少预期的标头_Android_Eclipse_Rest_Cordova_Fiddler - Fatal编程技术网

Android Emulator连接隧道缺少预期的标头

Android Emulator连接隧道缺少预期的标头,android,eclipse,rest,cordova,fiddler,Android,Eclipse,Rest,Cordova,Fiddler,我正在编写一个针对RESTful api的phonegap应用程序。为了调试的目的,我想看看我的POSTs和get是什么样子的。谷歌上的所有信息都说要使用fiddler代理。我安装了fiddler并开始工作,设置了我的android仿真器以使用它,但是每当我开始查询restful服务时,数据包都会以某种方式被破坏(或者至少是它的授权部分) 如果我没有启动代理,以下JS代码在我的android emulator中可以正常工作: $.post("https://blah.hi.com/homepag

我正在编写一个针对RESTful api的phonegap应用程序。为了调试的目的,我想看看我的POSTs和get是什么样子的。谷歌上的所有信息都说要使用fiddler代理。我安装了fiddler并开始工作,设置了我的android仿真器以使用它,但是每当我开始查询restful服务时,数据包都会以某种方式被破坏(或者至少是它的授权部分)

如果我没有启动代理,以下JS代码在我的android emulator中可以正常工作:

$.post("https://blah.hi.com/homepage/security_check",
     $("#loginForm").serialize(), function (data, textStatus, jqXHR) {...
但是当我让fiddler运行时,为了分析我的android应用程序发出的请求,我得到以下错误:

从检查fiddler中的初始请求可以看出,进行了以下更改:

用户代理、连接和主机头被剥离。我尝试使用Fiddler规则手动添加它们,但没有成功

这里有一个很好的比较:

另外,当我查看请求的TextView选项卡时,扩展名下的以下标题被删除(以下是使用Chrome、通过fiddler和works时请求的外观图片):

现在,当通过eclipse android emulator,通过fiddler,并失败时,情况如下:

我曾想过使用WireShark,但所有的通信都是通过https完成的,我更喜欢使用fiddler

任何建议都将不胜感激!!此外,我还使用以下参数来访问代理-http proxy 127.0.0.1:8888

编辑:以下是使用Android 4.X模拟器时的一些调试信息(该模拟器也会失败)。

旧Android SDK/Emulator版本很可能出现问题:

还值得检查相关问题中缺少的标题讨论:

据了解,这个问题似乎只存在于Android 3.x及更低版本上:

这个问题只发生在Android 3.x及更低版本上。iOS很好。所有主要的桌面浏览器都很好。安卓4.x很好

尝试使用Android 4.x emulator,看看是否有效

更新: 在某些情况下,这可能是一个具有挑战性的配置,而不是一个不清楚的bug。退房:

在Android emulator中设置持久可信CA是一个常见问题,我们在评估正确使用SSL的emulator中的应用程序时都会遇到这个问题。目标是从运行在Android emulator中的应用程序获得中间人(MITM)流量

为了成功实现MITM通信,设备必须信任中间节点的证书颁发机构(CA),否则连接将失败,并出现一些通用SSL握手错误。通常,可以通过修改cacerts文件并重新启动设备,在根电话上将中间节点标记为受信任。在Android emulator中尝试执行此操作时,重新启动虚拟设备会导致操作系统将许多系统文件还原回其基本状态,包括cacerts文件。本文的其余部分描述了如何设置一个模拟器,在重新启动后保留对核心系统文件的修改。据我所知,这还没有被记录在一个地方,所以希望这能为那些面临这个问题的人节省时间


您显示的屏幕截图来自Fiddler,所以不清楚您为什么认为任何东西都“被剥离”?在配置您的手机时,我猜是您使用IPTables来破解访问代理的请求?你可能应该看看这个:@EricLaw updated显示了一个更直接的比较,不希望用户推断出任何东西,而且你的链接似乎对我不起作用。看起来链接太糟糕了。有趣。您只需转到并搜索“Subject name replaced with IP Address”即可找到主题。空的“Extensions”列表是因为客户端未在连接隧道请求上发送任何TLS扩展。主机丢失可能是由于客户端中的错误(请参阅下面的答案)。如果您没有将Android配置为信任Fiddler的证书,那么我绝对希望您在连接隧道后不会看到任何流量。不走运。运行安卓4.2模拟器时,我仍然会遇到同样的错误。@bulltorious,看看我的更新,这可能是由EricLaw在评论中建议的。