在 Java 中发送网络请求有多种方式,下面按常用程度给你总结,并附上可运行示例。
HttpURLConnection(JDK 自带,最基础)✅ 适合简单场景
❌ 代码偏繁琐
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();
}
}
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();
}
}
✅ 功能强大
✅ 使用广泛
❌ 需要引入依赖
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.3</version>
</dependency>
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;
});
}
}
}
✅ 简洁高效
✅ 支持异步
✅ 非常流行
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
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.net.http.HttpClient(现代推荐 ✅)✅ JDK 自带
✅ 支持异步
✅ API 设计现代
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<String> 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 |
Content-Type如果你有具体场景(如:
✅ 上传文件
✅ 调用第三方 API
✅ 带 Token / Header
✅ 异步请求
✅ Spring Boot 项目)
可以直接告诉我,我可以给你针对性示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。