android网络请求设置代理

时间:2026-10-17 05:09:18 来源:力不从心网

Android开发里设置代理,络请理最直接的求设原因就是抓包调试。Charles、置代Fiddler这些工具,络请理不配置代理根本看不到App的求设HTTPS流量。但很多人卡在第一步——代码里写了代理,置代请求却死活不走代理服务器。络请理

问题多半出在Android 7.0之后的求设网络安全配置上。系统默认不信任用户安装的置代证书,你抓包工具装的络请理那个证书,App根本不认。求设解决办法有两个:一是置代把抓包工具的证书装进系统证书目录,需要root;二是络请理在App的networkSecurityConfig里显式信任用户证书。后者更常用,求设在AndroidManifest里加个属性,置代指向一个XML文件,里面写上信任用户证书的配置就行。

真正写代码设置代理,分两种情况。一种是给OkHttp设置,另一种是给HttpURLConnection设置。OkHttp现在基本是标配,用起来也简单:

OkHttpClient client = new OkHttpClient.Builder() .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8888))) .build(); 

这段代码会把所有请求打到本机8888端口。但有个坑——如果你用了Retrofit,它内部封装了OkHttp,你得通过Retrofit.Builder的client()方法把配置好的OkHttpClient传进去,不然Retrofit会自己new一个默认的,你的代理设置根本不生效。

HttpURLConnection那边更直接:

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8888)); HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy); 

注意,这里必须用openConnection(proxy)而不是openConnection(),否则代理就是个摆设。

还有个容易忽略的点:代理服务器地址别写localhost。Android模拟器里,localhost指的是模拟器自己,不是你的电脑。要用10.0.2.2才能访问宿主机。真机调试的话,得写电脑在局域网里的IP。我见过不少人卡在这,抓包工具监听的是电脑的8888端口,App里却写127.0.0.1,结果请求全打到手机自己身上,自然连不上。

另外,代理设置是全局的还是单次请求的,得想清楚。如果只是调试,建议写个开关,用BuildConfig.DEBUG控制。别把代理代码直接写进生产环境的请求逻辑里,否则用户手机上流量全走代理服务器,轻则速度慢,重则数据泄露。我之前接手过一个项目,前人把代理写死在网络层,上线后用户反馈加载慢,查了半天才发现是代理在作祟。

最后提一嘴,如果你用Charles抓HTTPS,代理设好了还不行,得在Charles里开启SSL Proxying,并给域名加白名单。不然代理是通了,但返回的全是乱码——因为证书校验失败,连接被掐断了。

代理这个东西,配置起来就那么几行代码,但坑全在细节里。搞懂原理,比死记代码有用得多。

上一篇:智睿学校
下一篇:kali端口扫描命令
推荐内容