架构师问答
Java 的4种 Http 调用
本 文 目 录
HTTP 调用是日常开发中经常遇到的问题,本文将介绍四种常见的 Java HTTP 调用方法。
一、HttpURLConnection
HttpURLConnection
是 Java 自带的 API,可以用来发送 HTTP 请求和接收 HTTP 响应。它是一个抽象类,常用的子类有 HttpURLConnetion
和 HttpsURLConnection
。HttpURLConnection
使用起来相对简单,适合简单的 GET 和 POST 请求。
实现步骤:
- 创建 URL 对象
- 打开连接
- 设置请求参数
- 发送请求
- 接收响应
- 关闭连接
具体实现:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpURLConnectionDemo {
public static void main(String[] args) throws Exception {
// 1. 创建 URL 对象
URL url = new URL("http://example.com");
// 2. 打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 3. 设置请求参数(例如:设置请求方法为 POST)
conn.setRequestMethod("POST");
conn.setDoOutput(true);
// 4. 发送请求(例如:发送一个 JSON 字符串)
String json = "{\"key\":\"value\"}";
byte[] bytes = json.getBytes("UTF-8");
conn.getOutputStream().write(bytes);
// 5. 接收响应(例如:读取响应内容)
int responseCode = conn.getResponseCode();
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 输出结果
System.out.println(response.toString());
// 6. 关闭连接
conn.disconnect();
}
}
二、Apache HttpClient
Apache HttpClient 是 Apache 组织提供的一个强大的 HTTP 客户端库,支持多种协议和认证方式。它的功能比 HttpURLConnection
更加强大,但使用起来也稍微复杂一些。
实现步骤:
- 创建 HttpClient 对象
- 创建 HttpMethod 或 HttpRequestBase 对象
- 设置请求参数
- 发送请求并接收响应
- 处理响应结果
- 关闭连接
具体实现:
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class HttpClientDemo {
public static void main(String[] args) throws Exception {
// 1. 创建 HttpClient 对象
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
// 2. 创建 HttpMethod 或 HttpRequestBase 对象
HttpGet httpGet = new HttpGet("http://example.com");
// 3. 设置请求参数
// ...
// 4. 发送请求并接收响应
CloseableHttpResponse response = httpClient.execute(httpGet);
try {
// 5. 处理响应结果(例如:读取响应内容)
HttpEntity entity = response.getEntity();
if (entity != null) {
String result = EntityUtils.toString(entity);
System.out.println(result);
}
} finally {
response.close();
}
} finally {
// 6. 关闭连接
httpClient.close();
}
}
}
三、OkHttp
OkHttp 是一款现代且高效的 HTTP 客户端库,由 Square 公司开发。它具有良好的性能、易于使用的 API 和灵活的网络调优策略。
实现步骤:
- 创建 OkHttpClient 对象
- 创建 Request 对象
- 设置请求参数
- 发送请求并接收响应
- 处理响应结果
具体实现:
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OkHttpDemo {
public static void main(String[] args) throws Exception {
// 1. 创建 OkHttpClient 对象
OkHttpClient client = new OkHttpClient();
// 2. 创建 Request 对象
Request request = new Request.Builder()
.url("http://example.com")
.build();
// 3. 设置请求参数
// ...
// 4. 发送请求并接收响应
Response response = client.newCall(request).execute();
// 5. 处理响应结果(例如:读取响应内容)
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
System.out.println(response.body().string());
}
}
四、Spring WebClient
Spring WebClient 是 Spring Framework 5.0 引入的新特性,提供了一种现代化的方式来执行 HTTP 请求。它基于反应式编程模型,支持异步处理和流式数据。
实现步骤:
- 创建 WebClient 对象
- 创建 Flux 或 Mono 对象
- 发送请求并接收响应
- 处理响应结果
具体实现:
import reactor.core.publisher.Mono;
import org.springframework.web.reactive.function.client.WebClient;
public class SpringWebClientDemo {
public static void main(String[] args) throws Exception {
// 1. 创建 WebClient 对象
WebClient webClient = WebClient.create();
// 2. 创建 Mono 对象
Mono<String> mono = webClient.get()
.uri("http://example.com")
.retrieve()
.bodyToMono(String.class);
// 3. 发送请求并接收响应
mono.subscribe(result -> {
// 4. 处理响应结果(例如:打印响应内容)
System.out.println(result);
});
}
}
总结
以上介绍了 Java 中的四种 HTTP 调用方式,包括 HttpURLConnection
、Apache HttpClient、OkHttp 和 Spring WebClient。这些库各有优缺点,开发者可以根据实际需求选择合适的库进行使用。同时,在实际应用中,我们还需要考虑异常处理、线程安全等问题。
- 上一篇
java 接口中的方法可以使用哪些修饰符,为什么?
在Java中,接口是一种引用数据类型,它定义了一组抽象方法。这些方法必须在实现接口的类中进行实现。接口中的方法默认是public abstract的,也可以显式地声明为public或abstract。## 1. 接口中的方法修饰符在Java接口中,我们可以使用的修饰符有:- `public`:这是默认的访问修饰符,表示该方法可以在任何地方被访问。- `abstract`:这也是默认的修饰符,表示该
- 下一篇
java 问号表达式?
## Java问号表达式的含义?Java 8引入了一种新的表达式语法,称为“问号表达式”或“三元条件运算符”。这种表达式允许我们用更简洁的代码来替代if-else语句。## 问号表达式具体怎么用步骤1. 了解问号表达式的结构2. 使用问号表达式进行简单的值判断和赋值3. 在实际场景中使用问号表达式简化代码### 1. 了解问号表达式的结构问号表达式的基本结构是:`condition ? value