特点:
使用方法:
URL
对象并打开连接: URL url = new URL("https://api.example.com/data"); HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); // 5秒超时
int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { InputStream inputStream = connection.getInputStream(); // 读取数据并解析 }
connection.disconnect();
优点:
缺点:
AsyncTask
或Thread
)。 特点:
使用方法:
build.gradle
): implementation 'com.squareup.okhttp3:okhttp:4.11.0'
OkHttpClient
实例: OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(5, TimeUnit.SECONDS) .build();
Request request = new Request.Builder() .url("https://api.example.com/data") .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 { if (response.isSuccessful()) { String data = response.body().string(); // 解析数据 } } });
优点:
缺点:
特性 | HttpURLConnection | OkHttp |
---|---|---|
性能 | 较低(每次新建连接) | 高(连接复用) |
线程管理 | 需手动处理 | 内置异步支持 |
功能扩展 | 无 | 拦截器、缓存、自动重试 |
代码复杂度 | 较高(需处理细节) | 较低(封装完善) |
适用场景 | 简单请求、兼容旧项目 | 复杂场景、高性能需求 |
问题1:如何选择HttpURLConnection和OkHttp?
解答:
HttpURLConnection
。 OkHttp
。 问题2:OkHttp的拦截器有什么作用?
解答:
拦截器可修改请求/响应(如添加Header、日志记录、重试机制)。
client.interceptors().add(chain -> { Request newRequest = chain.request().newBuilder() .addHeader("Custom-Header", "Value") .build(); return chain.proceed(newRequest); });