注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

chrome 扩展开发--通过devtools.network api抓包  

来自nowind   2015-12-21 13:31:37|  分类: 质量保障平台 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近有需求开发一个http/https的抓包扩展,用来请求的重演.如果光是抓请求,我们看看开发者手册,很快可以定位到webRequest(https://developer.chrome.com/extensions/webRequest,需科学上网,下同)这个用于操作请求的api.用这个api抓请求只要1个权限和1个Listener即可.

然,我们现在需要的功能是不仅要有请求包的内容,还要有相应包的内容.根据人类的惰性,大家肯定是想在webRequest中找到某个可以获取response对象的Listener,于是 大家会定位到 onCompleted (https://developer.chrome.com/extensions/webRequest#event-onCompleted),但是我们看到回调函数是没有body的。
这个,似乎不好办。为啥会没有呢。参看https://groups.google.com/a/chromium.org/forum/#!topic/apps-dev/v176iCmRgSs ,对响应的body读取和编辑会影响性能。so 懒惰的人类也要寻找其他的解决方案。找了好久,至于定位到devtools.network(https://developer.chrome.com/extensions/devtools_network),这个东西可以完全模拟我们的开发者工具。但是有一个大前提,使用这个api必须在开发者工具中,而这些api实际上也只能在devtool page中被调用。根据手册的说明,需要在扩展中配置:

"devtools_page": "devtools.html"
在devtools.html 环境外调用时不起作用的。
devtools.network 对 请求和相应的描述是通过HAR的,这个格式现在应用比较广泛,在chrome的开发工具和firefox的开发者工具中都可以将网络数据导出这个格式。
关于HAR的标准,可以参看http://www.softwareishard.com/blog/har-12-spec/ 。其中有

"entries": [
    {
        "pageref": "page_0",
        "startedDateTime": "2009-04-16T12:07:23.596Z",
        "time": 50,
        "request": {...},
        "response": {...},
        "cache": {...},
        "timings": {},
        "serverIPAddress": "10.0.0.1",
        "connection": "52492",
        "comment": ""
    }
]
是我们最关心的。
getHAR()方法可以拿整个HAR,它能获取从开发者工具打开后到函数调用前所有包,onRequestFinished.addListener的回调函数可以取1个实体。
事情到了现在似乎很明朗,然还有个坑等着我们。
Note that request content is not provided as part of HAR for efficieny reasons. You may call request's getContent() method to retrieve content.
虾米,默认竟然不给我们response的body,所以我们还需要加1个回调用来获取response的body。
获取请求和响应的需求实现了,唯一的问题还是我们每次抓包要打开开发者工具。我们还是希望google可以在将来的版本中将webrequest中实现响应包的获取
  评论这张
 
阅读(1363)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016