【问题标题】:Android Emulator CONNECT tunnel missing expected headersAndroid Emulator CONNECT 隧道缺少预期的标头
【发布时间】:2013-02-01 19:19:24
【问题描述】:

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

如果我没有代理,以下 JS 代码在我的 android 模拟器中可以正常工作:

$.post("https://blah.hi.com/homepage/security_check",
     $("#loginForm").serialize(), function (data, textStatus, jqXHR) {...

但是当我让 fiddler 运行时,我可以分析我的 android 应用程序发出的请求,我收到以下错误:

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

User-Agent、Connection 和 Host 标头被剥离。我尝试使用 Fiddler 规则手动添加它们,但没有奏效。

这是一个很好的比较:

另外,当我查看请求的 TextView 选项卡时,Extensions 下的以下标题被剥离(以下是使用 Chrome 时请求的样子,并通过 fiddler,并且有效):

现在是通过 eclipse android 模拟器,通过 fiddler 并失败时:

我考虑过使用 WireShark,但是所有的通信都是通过 https 完成的,并且更喜欢使用 fiddler。

任何建议将不胜感激!另外,我通过使用以下参数 -http-proxy 127.0.0.1:8888 从这里 http://vkosinets.com/blog/2011/08/16/debug-http-requests-from-android-emulator 访问代理。

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

【问题讨论】:

  • 您显示的屏幕截图是 From Fiddler,所以不清楚为什么您认为“剥离”了任何内容?在配置手机时,我猜您使用了 IPTables破解请求去代理?你可能应该看看这个:groups.google.com/forum/?fromgroups#!searchin/httpfiddler/…
  • @EricLaw 更新显示更直接的比较并且不期望用户推断任何内容,而且您的链接似乎对我不起作用。
  • 看来 SO 破坏了链接。有趣的。你可以直接去groups.google.com/group/httpfiddler搜索“主题名称替换为IP地址”找到主题。
  • 空的“扩展”列表是因为客户端没有在 CONNECT 隧道请求上发送任何 TLS 扩展。 HOST 丢失可能是由于客户端中的错误(请参阅下面的答案)。
  • 如果您尚未将 Android 配置为信任 Fiddler 的证书,那么我绝对希望您在 CONNECT 隧道之后不会看到任何流量。

标签: android eclipse rest cordova fiddler


【解决方案1】:

这很可能是针对旧 Android SDK/Emulator 版本报告的问题:

Issue 12356: lost header on https connection via proxy

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

Issue 3334: SSL web sites fail to load in browser application when not connected via Wi-Fi

根据this post的说法,这个问题似乎只存在于Android 3.x及更低版本:

此问题仅在 Android 3.x 及更低版本上出现。 iOS 没问题。所有主要的桌面浏览器都很好。 Android 4.x 很好。

尝试使用 Android 4.x 模拟器,看看是否可行。

更新:

除了在某些情况下不清楚的错误之外,这可能是一个具有挑战性的配置。查看Setting up a persistent trusted CA in an Android emulator:

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

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

... ...

【讨论】:

  • 不走运。运行 Android 4.2 模拟器时,我仍然遇到同样的错误。
  • @bulltorious,看看我的更新,EricLaw 在他的评论中提出的建议可能是可行的。
猜你喜欢
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 2015-04-14
  • 2019-07-07
  • 1970-01-01
相关资源
最近更新 更多