V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sunjws
V2EX  ›  Android

现需要在 Android 上做一个浏览器一样的控件,截获请求数据与返回的数据,能不能提供一下思路?多谢大侠们!

  •  
  •   sunjws · 2017-05-31 09:19:49 +08:00 · 10454 次点击
    这是一个创建于 2728 天前的主题,其中的信息可能已经有所发展或是发生改变。
    23 条回复    2017-05-31 15:05:03 +08:00
    honeycomb
        1
    honeycomb  
       2017-05-31 09:25:14 +08:00 via Android
    webview ?
    lsyAndroid
        2
    lsyAndroid  
       2017-05-31 09:27:49 +08:00 via Android
    同楼上
    qqpkat2
        3
    qqpkat2  
       2017-05-31 09:38:09 +08:00
    当然是内嵌浏览器了
    sunjws
        4
    sunjws  
    OP
       2017-05-31 09:47:36 +08:00
    @honeycomb webview 截获不到啊....没有相应接口;

    @qqpkat2 安卓谷歌内核我研究了下,太复杂了,没有找到想要的相关接口;还有其他可能的开源内核么?最好是封装好的
    binsys
        5
    binsys  
       2017-05-31 10:06:09 +08:00
    要截取 android 数据?
    限定:在 android app 本身上动手,不说 proxy 方式或者路由交换机方式
    有 root 权限的好说,自己百度一堆。
    如果非 root 的需求,目前唯一的解决方案是写代码实现 android 提供的 VpnService api,虽然叫 VPN api,但是他拿到的是一个 fd,能拿到 本机所有三层的流量。
    这个服务启动 android 系统会提示用户让用户选择是否允许。
    请参考一个用此实现的广告过滤 app
    https://github.com/julian-klode/dns66
    pengfei
        6
    pengfei  
       2017-05-31 10:09:01 +08:00
    你下一个`Packet Capture`, 开源软件, 你看看是不是你说的那种
    codehz
        7
    codehz  
       2017-05-31 10:13:24 +08:00
    shouldInterceptRequest 这个方法看过了吗。。
    pcatzj
        8
    pcatzj  
       2017-05-31 10:21:51 +08:00
    同楼上,有个 webView.setWebViewClient 方法,重写楼上的方法,基本所有的请求都会经过这个方法
    pcatzj
        9
    pcatzj  
       2017-05-31 10:23:24 +08:00
    这个是网页的请求,如果是 native 本地请求,可以用 okhttp,设置 intercept,也能够拦截所有的请求
    pubby
        10
    pubby  
       2017-05-31 10:28:01 +08:00 via Android
    @codehz 这个 post 数据拿不到
    codehz
        11
    codehz  
       2017-05-31 10:39:17 +08:00
    @pubby #10 是 shouldInterceptRequest(WebView, WebResourceRequest)这个方法。。。之前那个 string 参数的确实只有 get
    pubby
        12
    pubby  
       2017-05-31 11:20:45 +08:00 via Android
    @codehz 试过了,post 请求时没 body 数据
    pubby
        13
    pubby  
       2017-05-31 11:24:44 +08:00 via Android
    @codehz 去年试的,最近 api 有没有改动不知道
    codehz
        14
    codehz  
       2017-05-31 11:28:54 +08:00
    @pubby #12 不是啊,覆盖那个方法后,请求不是你手动发出的么。。你只要按照 WebResourceRequest 的参数发 POST 请求给服务器,然后获取到的值作为返回值,然后顺便记录或者要啥操作都可以了啊
    pubby
        15
    pubby  
       2017-05-31 11:58:45 +08:00
    @codehz 楼主要截获这个请求啊,如果是 post 请求,你没法从这个 WebResourceRequest 里面获取原始需要 post 的数据啊
    qzskaka
        16
    qzskaka  
       2017-05-31 12:18:45 +08:00
    使用 TBS x5
    sunjws
        17
    sunjws  
    OP
       2017-05-31 13:35:32 +08:00
    @codehz 是的 不能获取到原始数据,不要再次拿到此接口进行 post,而是捕捉到原始数据

    @pengfei
    @binsys 谢谢两位,想要的就是这里面抓到的数据,我再研究一下
    sunjws
        18
    sunjws  
    OP
       2017-05-31 13:47:57 +08:00
    @qzskaka 谢谢你,但是我并没有找到对应的抓包方法
    huazidev
        19
    huazidev  
       2017-05-31 14:17:31 +08:00
    如果需要截取 post 请求的数据的话,目前我们这边使用的方法是让 web 端通过 js 将 post 数据返回,仅供参考。。
    codehz
        20
    codehz  
       2017-05-31 14:29:11 +08:00
    @pubby #15 那个 Request 只是请求描述对象。。。实际请求还没发出去,你可以选择自己发包,替换默认实现
    @sunjws #17
    pubby
        21
    pubby  
       2017-05-31 14:55:21 +08:00
    @codehz 知道,但是原始 post 请求内容没法获取我怎么自己发包?

    点点链接这种没问题,遇到表单递交就失败了
    codehz
        22
    codehz  
       2017-05-31 15:04:51 +08:00   ❤️ 1
    @pubby #21 你可以参考这篇文章
    http://blog.csdn.net/kpioneer123/article/details/51438204
    用 JSInterface+注入代码的方式截获请求体
    yankebupt
        23
    yankebupt  
       2017-05-31 15:05:03 +08:00
    猜测楼主做的某某小助手,抓的不是自己的数据...
    那只能希望内容方不开 https 或者跨域检测了。开的的话强行过滤修改估计有小概率被各种检测误杀...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1005 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 21:28 · PVG 05:28 · LAX 13:28 · JFK 16:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.