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

给 Android 和 iOS 的系统 WebView 设置代理的问题

  •  
  •   gouchaoer · 2017-05-15 11:40:19 +08:00 · 5411 次点击
    这是一个创建于 2751 天前的主题,其中的信息可能已经有所发展或是发生改变。
    业务中需要在安卓和 iOS 的 app 中打开系统默认的 WebView,但是我们需要给 WebView 设置 http 代理,但是安卓和 iOS 都没有提供这样的 API,所以需要用比较 hack 的方法来解决。

    在安卓下国内有人用反射做了一部分工作(但是安卓 6.x 似乎不行): http://www.jianshu.com/p/d02e8818a72e

    在 iOS 下还没头绪。

    但是我看蘑菇街有一篇文章( https://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=2651112324&idx=1&sn=34b15399d6519340f66410445f033e85 ,下拉倒“代理转发”的地方)讲他们给 WebView 设置代理,但是没有讲具体的方法,有人能点拨一下该咋搞么?
    6 条回复    2017-05-15 12:32:09 +08:00
    expkzb
        1
    expkzb  
       2017-05-15 11:52:10 +08:00
    那你抓个包看看蘑菇街的 webview 里的 html 代码,感觉无非就是都请求客户端本地的 httpserver,拿到参数后再通过网络库转发出去
    JGideon
        2
    JGideon  
       2017-05-15 12:02:42 +08:00
    试下 NSURLProtocol
    ctsed
        3
    ctsed  
       2017-05-15 12:08:16 +08:00 via Android
    ios 有 shadowrocket,安卓 root 后有 proxydroid
    ctsed
        4
    ctsed  
       2017-05-15 12:09:25 +08:00 via Android
    哦,无视上面回复。。
    kAzec
        5
    kAzec  
       2017-05-15 12:22:12 +08:00
    iOS 的 UIWebView 你需要自定义一个 NSURLProtocol 的子类, 重载 startLoading 函数,用 CoreFoundation 的 API 来设置代理。

    Objective-C: http://stackoverflow.com/questions/16847858/ios-any-body-knows-how-to-add-a-proxy-to-nsurlrequest
    Swift: http://stackoverflow.com/questions/38968040/how-to-set-proxy-in-web-view-swift

    WKWebView 目前(基本上)无解。
    pinocc
        6
    pinocc  
       2017-05-15 12:32:09 +08:00
    js 调用 native, native 做代理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3613 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:52 · PVG 12:52 · LAX 20:52 · JFK 23:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.