Android 为 WebView 设置代理访问网站

Android 为 WebView 设置代理访问网站

之前做过 WebView 代理访问网站的需求,并调查了多种方法,最后使用了 WebViewClient 拦截 shouldInterceptRequest 并自行构造响应来实现。

但这种实现并不支持文件上传,以及 post 数据。随后的深入发现 Google jetpack 库提供了设置代理的方法,经过测试,此种方法兼容性好,且实用性更高。

似乎为 WebView 设置代理访问的需求不是太高。网上相关文章比较少。

导入 jetpack 的 webkit 库

在项目的 app 工程的 build.gradle 中导入依赖

    // webkit
    implementation 'androidx.webkit:webkit:1.4.0'

为 webview 设置代理

在初始化 webview 的时候设置代理

        if (WebViewFeature.isFeatureSupported(WebViewFeature.PROXY_OVERRIDE)) {
            Log.i("Info", "设置代理");
            //设置代理
            ProxyConfig proxyConfig = new ProxyConfig.Builder()
                    .addProxyRule("http://192.168.0.26:8100")
                    .addDirect().build();
            ProxyController.getInstance().setProxyOverride(proxyConfig, new Executor() {
                @Override
                public void execute(Runnable command) {
                    //do nothing
                    Log.i("Info", "代理设置完成");
                }
            }, new Runnable() {
                @Override
                public void run() {
                    Log.w("Wanning", "WebView代理 改变");
                }
            });

在调用 setProxyOverride 方法设置代理的时候,并不需要传入 webview 对象。它会为应用程序内的所有 WebView 全部设置代理。

其中 .addProxyRule("http://192.168.0.26:8100") 就是为 webview 设置代理地址,协议为 http ,域名及端口为:192.168.0.26:8100

addProxyRule 方法根据文档。支持 http https socks 三种协议

这种设置代理的方法,简单易用

网站直连

这种方式是应用内的 WebView 全局代理,如果需要绕过某些网站,可以指定,或者使用通配符进行绕过:

            ProxyConfig proxyConfig = new ProxyConfig.Builder()
                    .addProxyRule("http://192.168.0.26:8100")
                    .addBypassRule("www.baidu.com")
                    .addBypassRule("www.bing.com")
                    .addBypassRule("*.bing.com")
                    .addDirect().build();

addBypassRule 可以多次调用

其它

如果需要代理访问国外网站怎么办?总不能在 国外 vps 上搭建一个 socks 代理,然后为 webview 设置。gfw 会阻断常规的,连向国外的协议

目前使用的方式是:国外vps 搭建其它的协议,如 ss 等。国内 vps 作为ss 客户端,连接 国外vps ,并同时作为 socks 的服务端。让 webview 连接 国内的 vps。使用国内 vps 作为跳板机进行访问

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://zwc365.com/2021/07/12/android为webview设置代理访问网站

Buy me a cup of coffee ☕.