最近在搭一个wifi,用小米手机测试,发现每次小米手机连上wifi时,都会自动发一个HTTP请求,抓到的包如下:GET /v2/user/0/network/bucket?type=wifi&uuid=0&s=B6DC648CAE5A5EE7FA48E545F9F0D3DD HTTP/1.1
http.useragent: xmpush
Cookie:
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.0.4; MI 1SC MIUI/ICS24.0)
Host: 121.11.79.73
Connection: Keep-Alive
Accept-Encoding: gzip我自己用浏览器试了一下这个HTTP请求,发现得到的结果是一个JSON串,内容如下:{
"S": "Ok",
"R": {
"province": "河北",
"wifi": {
"api.micloud.xiaomi.net": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"mipush": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"app": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"upload": [
"14.17.87.217",
"112.90.247.43",
"120.197.84.251",
"58.68.235.172"
],
"smallfiles": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"et.xiaomi.com": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"api": [
"121.11.79.73",
"112.90.33.211",
"120.197.84.250",
"58.68.235.172"
],
"download": [
"223.202.255.21",
"107.23.52.182",
"58.68.235.172",
"59.151.110.254"
]
},
"X-Forwarded-Ip": "119.253.46.2",
"stat-domain": "s.mi1.cc",
"ip": "119.253.46.2",
"stat-percent": 0.05,
"ttl": 3600,
"city": "廊坊",
"country": "中国",
"isp": "",
"tid": -1,
"wap": {
"api.micloud.xiaomi.net": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"mipush": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"app": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"upload": [
"14.17.87.217",
"112.90.247.43",
"120.197.84.251",
"58.68.235.172"
],
"smallfiles": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"et.xiaomi.com": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"api": [
"121.11.79.73",
"112.90.33.211",
"120.197.84.250",
"58.68.235.172"
],
"download": [
"223.202.255.21",
"107.23.52.182",
"58.68.235.172",
"59.151.110.254"
]
}
}
}有哪位知道这是在干吗?
http.useragent: xmpush
Cookie:
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.0.4; MI 1SC MIUI/ICS24.0)
Host: 121.11.79.73
Connection: Keep-Alive
Accept-Encoding: gzip我自己用浏览器试了一下这个HTTP请求,发现得到的结果是一个JSON串,内容如下:{
"S": "Ok",
"R": {
"province": "河北",
"wifi": {
"api.micloud.xiaomi.net": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"mipush": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"app": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"upload": [
"14.17.87.217",
"112.90.247.43",
"120.197.84.251",
"58.68.235.172"
],
"smallfiles": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"et.xiaomi.com": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"api": [
"121.11.79.73",
"112.90.33.211",
"120.197.84.250",
"58.68.235.172"
],
"download": [
"223.202.255.21",
"107.23.52.182",
"58.68.235.172",
"59.151.110.254"
]
},
"X-Forwarded-Ip": "119.253.46.2",
"stat-domain": "s.mi1.cc",
"ip": "119.253.46.2",
"stat-percent": 0.05,
"ttl": 3600,
"city": "廊坊",
"country": "中国",
"isp": "",
"tid": -1,
"wap": {
"api.micloud.xiaomi.net": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"mipush": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"app": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"upload": [
"14.17.87.217",
"112.90.247.43",
"120.197.84.251",
"58.68.235.172"
],
"smallfiles": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"et.xiaomi.com": [
"14.17.87.216",
"123.129.222.196",
"120.197.84.249",
"58.68.235.171"
],
"api": [
"121.11.79.73",
"112.90.33.211",
"120.197.84.250",
"58.68.235.172"
],
"download": [
"223.202.255.21",
"107.23.52.182",
"58.68.235.172",
"59.151.110.254"
]
}
}
}有哪位知道这是在干吗?
解决方案 »
- 请问怎么样实现腾讯手机管家通知栏一样不能被手动删除的功能?
- 蓝牙长时间工作出现错误 Nolonger want com.android.bluetooth
- 问个关于jNI返回结构体的问题,请教一下
- 求救,repo的问题,还有救么
- android使用webview在3G网络下的问题
- 在模拟器上能连接tomcat服务器并获取信息但是到真机上却不能连接服务器
- 【求问】如何在Android平台读取网络图片并滚动显示
- Android 模拟器播放视频没有声音
- 请教一个android调用JS的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- Action如何换掉返回箭头
- phonegap 打包签名后,不能通过phonegap调用api应该是打包混淆文件后出问题
- android调试崩溃问题,求各位大哥支招!
105楼小米开发人员的解释:
你好,我来解释一下这个事情吧。我是小米的开发人员汪轩然,负责米聊和miui中的推送服务的开发工作。
首先很佩服兄台的钻研精神,我们的专业测试也不过如此了,在此表示感谢。
然后我解释一下为什么miui中需要一个长连接。当你开通了小米云,网络短信等服务时,由于需要及时收到服务器下发的推送数据(比如你的通讯录在网页端有更新,有人给你发了网络短信等),因此miui系统需要维护一个长连接,保证这些数据的实时性。
而楼主看到的这些“莫名其妙”的http请求,其实是这个长连接中的一些数据交互。也许你会继续追问下去,长连接不一般都是基于TCP协议的吗?为什么会是http请求呢?确实,一般我们都是通过TCP来维护这个长连接的,而当碰到一些比较特殊的情况,比如网关把TCP所需访问的端口给封禁了,或者直接把我们的协议给封禁了,在这种情况下,为了让miui上的推送服务仍然工作,我们采用了使用http的long pulling来实现长连接的技术(这种技术被称为BOSH,楼主有兴趣的话可以去google一下)。因此你看到的所有的数据都是http请求。
好吧,还有最后一个疑问,为什么会这么频繁?那是因为通常在开机的时候,系统并不知道自己不在线的这段时间,数据都有哪些变化,因此需要通过这条长连接,把自己各种数据上次更新的时间点告知服务器,然后服务器根据这些时间点,推送下相关的离线数据。由于在这条长连接上的业务比较多(通讯录,短信,通话记录等),因此你看到的请求会比较频繁。而当这些同步的请求完成之后,如果没有数据,以后的请求就不会如此频繁了,而会维持在每5分钟一个请求的频率。否则,miui用户的流量早就爆了。不知这个答案能否让楼主满意?