作为一名数据采集工程师,现在在研究如何防止别人采集我们的数据。当然这就是一个博弈,在博弈的过程中大家都能得到技术上的进步。
今天写的文章是如何让app不走系统代理
效果图
流程分析
- 当点击按钮的时候,使用okhttp发起了一个百度的请求。
- 将获得的内容通过Toast弹出。
- 同时在观察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的包应该怎么办呢?我只管抛出问题。