代理模式:在安卓客户端与目标服务器之间插入代理服务器,所有请求先发送到代理服务器,由代理服务器转发至目标服务器并返回响应,适用于数据中转、安全审计、跨协议转换等场景。
核心组件:
HttpURLConnection
、OkHttp
)方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
HttpURLConnection |
基础网络请求 | 原生支持,无需第三方库 | 需手动处理线程和异常 |
OkHttp |
复杂网络操作 | 高效连接池、拦截器 | 需添加依赖 |
Retrofit |
REST API调用 | 接口化开发,易维护 | 学习成本较高 |
第三方代理库 |
快速集成 | 开箱即用 | 可能存在兼容性问题 |
// 1. 添加依赖(build.gradle) // implementation 'com.squareup.okhttp3:okhttp:4.10.0' // 2. 创建代理客户端 OkHttpClient client = new OkHttpClient.Builder() .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy.example.com", 8080))) .build(); // 3. 发起请求 Request request = new Request.Builder() .url("https://target-server.com/api") .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // 处理失败 } @Override public void onResponse(Call call, Response response) throws IOException { // 处理成功响应 } });
当代理服务器使用自签名证书时,需绕过证书验证(仅用于开发环境):
// 创建信任所有证书的SSLContext SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[]{new X509TrustManager(){ @Override public void checkClientTrusted(X509Certificate[] chain, String authType) {} @Override public void checkServerTrusted(X509Certificate[] chain, String authType) {} @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }}, new SecureRandom()); // 配置OkHttp客户端 OkHttpClient client = new OkHttpClient.Builder() .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager)sslContext.getTrustManagers()[0]) .hostnameVerifier((hostname, session) -> true) // 跳过主机名验证 .build();
问题 | 原因 | 解决方案 |
---|---|---|
连接超时 | 代理服务器不可达 | 检查代理地址/端口,确保网络连通性 |
SSL握手失败 | 证书未信任 | 配置SSLContext或导入证书 |
响应数据丢失 | 缓冲区溢出 | 使用BufferedSource 分段读取数据 |
权限拒绝 | 未声明网络权限 | 在AndroidManifest.xml 添加<uses-permission android:name="android.permission.INTERNET"/> |
解答:
解答:
OkHttp
的连接池机制复用TCP连接 @Cache
注解