如何监控Android模拟器的HTTP访问情况

原创 2010年08月22日 15:14:00

前几个月,在调试某个应用时,需要监控应用与服务器之间的HTTP通讯。从搜索引擎找到的方案几乎全错。要么是人云亦云,要么是只能满足旧的平台版本,要么根本就是臆测。不得其解之际,用比较复杂的方法解决了。昨天想起来,觉得太过窝囊,于是重整旗鼓,终于在官方文档上找到一点启发。把真正能解决问题的方案写下来,一方面给同样遇到问题的朋友一点帮助,另一方面也是提醒自己,官方文档是解决问题的第一方案,但读文档也有讲究。不读文档、不思考,一遇问题就上网搜,结果大概都会事倍功半。

 

问题场景:在调试某个应用时,需要监控应用与服务器之间的HTTP通讯。

 

解决思路:第一时间想到Fiddler2。Android官方文档提到用TCPDump获得通讯封包或实时监控,好是好,有点高射炮打蚊子的意思。Fiddler2这个工具,界面友好,功能足够使用,可以说是Windows上最好的HTTP监控工具。Fiddler2用起来很方便,运行之后,即在本机建立一个代理(缺省设置为127.0.0.1:8888),其他访问HTTP的应用程序,把代理设为同一地址和端口即可。

 

实施过程:

 

按照文档的指导,在启动模拟器时,使用 -http-proxy参数,设置127.0.0.1:8888为模拟器的上网代理,结果失败。Fiddler2没有抓到通讯应答。

 

上网搜索,许多文章或帖子(包括英文的和中文的)都说要修改模拟器的系统设置数据库,添加一条HTTP_PROXY的记录。尝试后失败。

 

解决方案:

 

再细读文档中有关模拟器的部分,看到Network Address Space一段,忽有所悟。这段文字是这么写的——

 

Each instance of the emulator runs behind a virtual router/firewall service that isolates it from your development machine's network interfaces and settings and from the internet. An emulated device can not see your development machine or other emulator instances on the network. Instead, it sees only that it is connected through Ethernet to a router/firewall.

 

(译文)模拟器在虚拟路由器/防火墙服务后面运行,这套路由器/防火墙服务隔离于开发机的网络界面、设置,也与互联网相隔离。模拟设备不能访问开发机或网络上的其他模拟器。它看到的只是自己通过以太网连接到一个路由器/防火墙。

 

这下清楚了,模拟器压根不知道127.0.0.1是个啥地址,也压根访问不到。在127.0.0.1上设置的代理,自然也抓不到任何通讯应答了。文档接着写道,这个虚拟防火墙/路由器管理从10.0.2.2至10.0.2.24,模拟器的IP地址是10.0.2.15,而模拟器看到的开发机地址则是10.0.2.2。也就是说,从模拟器的立场看,Fiddler2是在10.0.2.2上运行的。

 

于是用emulator命令加上avd -http-proxy 10.0.2.2:8888参数启动模拟器,在模拟器上运行browser,访问任何web地址,可以看到,Fiddler2抓到了HTTP通讯:

 

 

在自己的应用程序中打开创建HttpURLConnection,访问同一网址(下面只是创建连接的代码,访问代码略):

 

private HttpURLConnection createConnection(URL url){
  
  HttpURLConnection conn=null;
  
  try {
   conn=(HttpURLConnection)url.openConnection();
  } catch (IOException e) {
   e.printStackTrace();
  }
  
  return conn;
 }

 

这次Fiddler2没能抓到通讯。但应用程序访问网页是成功的。只在启动模拟器时加上-http-proxy参数还不够,应用程序创建连接时,也要指定HTTP代理才行:

 

private HttpURLConnection createConnectionWithProxy(URL url, String proxyAddress, int proxyPort) {
  
  HttpURLConnection conn = null; 
     
   Proxy proxy=new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyAddress,proxyPort));
   
   try {
    conn = (HttpURLConnection) url.openConnection(proxy);
   } catch (IOException e) {
    e.printStackTrace();
   } 
  
  return conn;
 }

 

调用上述方法,传入代理地址10.0.2.2和端口8888,再次运行应用程序,这次可以了(截图和上图大同小异,略)。

 

这个问题其实很简单,关键还是1、对Android的熟悉程度;2、好好阅读文档。但是,什么也代替不了思考。其他问题的解决也是同理。

 

 

DircetDraw c/c++ 使用指导(一)

DircetDraw c/c++ 使用指导310cdt 译边看边译,译完就拿了上来,见笑了这是一系列的DirectDraw的指南,教你一步步的去构建一个简单的DirectDraw应用.这个指南用到了s...
  • 310cdt
  • 310cdt
  • 2002-01-22 11:37:00
  • 845

Fiddler2 抓取android模拟器HTTP请求操作配置

Fiddler2 抓取android模拟器HTTP请求操作配置 http://blog.sina.com.cn/s/blog_696665040101hwwg.html...
  • wpyily
  • wpyily
  • 2015-05-19 18:08:58
  • 2196

Android模拟器中访问局域网地址

2012年12月7日    Android模拟器中访问局域网地址 我们需要用到android-sdk开发包中adb shell  进入Android SDK中的platform-tool...
  • yuanyuan_186
  • yuanyuan_186
  • 2013-10-23 13:57:11
  • 1706

让Android模拟器能访问到本地Server或Web应用的方法

http://bbs.9ria.com/thread-263122-1-1.html I、困扰 近日,在移植Mina框架到Android上时,将已经做好的Demo客户端直接...
  • zjtbetter
  • zjtbetter
  • 2013-10-18 21:39:20
  • 1392

用Android访问本地站点---(localhost,10.0.2.2)要区别

不知道大家是否想试一下用Android模拟器如何访问自己建的Web站点呢? 下面我将讲一下如何实现. Step 1:我用的Tomcat作为本地服务器,在Webapps这个目录里,把我的名为kankon...
  • Android_Tutor
  • Android_Tutor
  • 2009-12-13 11:01:00
  • 23598

监控自己APP的http/https网络请求的地址和请求耗时

关于监控http/https网络请求的思路, 目前想到两种实现思路:第一种实现思路是hook http请求的根接口, 第二种实现思路是aop/动态代理....
  • kslinabc
  • kslinabc
  • 2016-06-28 14:57:29
  • 7033

Android模拟器访问本机服务IP地址

10.0.2.2
  • zengmingen
  • zengmingen
  • 2016-12-21 12:33:19
  • 910

Android模拟器访问本地服务器 localhost

最近真机给拿走了,所以只能耐着卡顿的模拟器先使用.突然需要连接本地服务器tomcat  在网上找了一会info,才知道和电脑一样通过localhost或者127.0.0.1访问失败.当然 手机也相当...
  • vvqiu
  • vvqiu
  • 2016-07-28 12:48:01
  • 6516

Android模拟器连接不上10.0.2.2:8080的解决办法

Android模拟器连接不上10.0.2.2:8080的解决办法用Android原生模拟器可以连接10.0.2.2端口,但是其他模拟器不能使用,例如Genymotion、夜神模拟器却不行。我们可以尝试...
  • li521wang
  • li521wang
  • 2017-01-14 13:23:59
  • 1737

网站基本访问情况监控,全面了解网站访问情况~

一、监控内容定义SUM服务器监控软件对网站基本访问情况的监控,主要包括以下几个方面:最近一个自然分钟、小时、日内页面访问量(PV)、访问人次(UV)、最大在线人数(OV)、当前在线人数(一分钟内同时在...
  • zhetaosum2010
  • zhetaosum2010
  • 2010-10-20 15:51:00
  • 301
收藏助手
不良信息举报
您举报文章:如何监控Android模拟器的HTTP访问情况
举报原因:
原因补充:

(最多只允许输入30个字)