Java网络请求如何发送
在 Java 中发送网络请求有多种方式,下面按常用程度给你总结,并附上可运行示例。
一、使用 HttpURLConnection(JDK 自带,最基础)
✅ 适合简单场景
❌ 代码偏繁琐
1️⃣ GET 请求示例
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpGetExample {
public static void main(String[] args) throws Exception {
URL url = new URL("https://api.example.com/data");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream())
);
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
conn.disconnect();
}
}
2️⃣ POST 请求(JSON)
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpPostExample {
public static void main(String[] args) throws Exception {
URL url = new URL("https://api.example.com/post");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
String json = "{"name":"Tom","age":18}";
try (OutputStream os = conn.getOutputStream()) {
os.write(json.getBytes());
os.flush();
}
System.out.println("ResponseCode: " + conn.getResponseCode());
conn.disconnect();
}
}
二、使用 Apache HttpClient(工业级,推荐)
✅ 功能强大
✅ 使用广泛
❌ 需要引入依赖
Maven 依赖
<dependency>
<groupId>org.apache.httpcomponents.client5groupId>
<artifactId>httpclient5artifactId>
<version>5.3version>
dependency>
GET 请求示例
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
public class HttpClientGet {
public static void main(String[] args) throws Exception {
try (CloseableHttpClient client = HttpClients.createDefault()) {
HttpGet get = new HttpGet("https://api.example.com/data");
client.execute(get, response -> {
System.out.println(response.getCode());
return null;
});
}
}
}
三、使用 OkHttp(Android / 后端都常用 ✅)
✅ 简洁高效
✅ 支持异步
✅ 非常流行
Maven 依赖
<dependency>
<groupId>com.squareup.okhttp3groupId>
<artifactId>okhttpartifactId>
<version>4.12.0version>
dependency>
GET 请求
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OkHttpGet {
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.example.com/data")
.build();
try (Response response = client.newCall(request).execute()) {
System.out.println(response.body().string());
}
}
}
四、Java 11+ java.net.http.HttpClient(现代推荐 ✅)
✅ JDK 自带
✅ 支持异步
✅ API 设计现代
GET 请求
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Java11HttpClient {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data"))
.GET()
.build();
HttpResponse response =
client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
五、如何选择?
| 场景 | 推荐 |
|---|---|
| 不想引入依赖 | HttpURLConnection |
| 新项目 / Java 11+ | ✅ java.net.http.HttpClient |
| Android | ✅ OkHttp |
| 企业级 / 老项目 | Apache HttpClient |
六、常见注意点
- 设置超时,防止阻塞
- 关闭连接 / 流
- POST 要设置
Content-Type - 中文参数需要 URL 编码
- HTTPS 一般无需额外配置
如果你有具体场景(如:
✅ 上传文件
✅ 调用第三方 API
✅ 带 Token / Header
✅ 异步请求
✅ Spring Boot 项目)
可以直接告诉我,我可以给你针对性示例。