如何让app不走系统代理?

作为一名数据采集工程师,现在在研究如何防止别人采集我们的数据。当然这就是一个博弈,在博弈的过程中大家都能得到技术上的进步。
今天写的文章是如何让app不走系统代理

效果图

在这里插入图片描述

流程分析

  1. 当点击按钮的时候,使用okhttp发起了一个百度的请求。
  2. 将获得的内容通过Toast弹出。
  3. 同时在观察fiddler是否抓取到了请求。

原理分析

  • 在网络请求的时候,通过OkHttp可以设置一个选项,代理的类型。我们在这里直接设置成Proxy.NO_PROXY。这样话即使android设置了代理,我们的app也不会走代理。
  • 如果我们把proxy选项注释掉,看下效果。
    在这里插入图片描述
  • 效果显而易见呀。很多网络请求类库应该都会有代理的选项,大家可以试下其他的。

源码

 public void run() {
        Looper.prepare();
        OkHttpClient okHttpClient = new OkHttpClient.Builder().
                proxy(Proxy.NO_PROXY).
                build();
        Request request = new Request.Builder()
                .url("http://www.baidu.com")
                .build();
        Response response = null;
        try {
            response = okHttpClient.newCall(request).execute();
            Toast.makeText(this, Objects.requireNonNull(response.body()).string(), Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Looper.loop();
    }

总结

  • android系统设置的代理并不是强制对所有app生效的
  • app可以在网络请求类库中通过自定义代理设置,选择是否要走系统代理
  • 看到这里,大家应该知道为什么有时候通过fiddler无法抓取app的包了么?即使app使用的是http的请求。
  • 当然,既然android系统的代理设置并不是强制的,那么我们想抓取app的包应该怎么办呢?我只管抛出问题。
发布了33 篇原创文章 · 获赞 21 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u013356254/article/details/104725952