📅  最后修改于: 2023-12-03 14:42:18.053000             🧑  作者: Mango
在 Java 中,我们经常需要通过发送 HTTP 请求来与网络上的其他应用程序进行交互。Java 提供了多种发送 HTTP 请求的方式,本文将介绍最常用的几种方式。
HttpURLConnection
是 Java 自带的一个基于 HTTP 协议的请求发送器,它是 java.net
包中的一员。以下是一个使用 HttpURLConnection
发送 GET 请求的示例:
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class HttpExample {
public static void main(String[] args) {
try {
URL url = new URL("https://jsonplaceholder.typicode.com/posts/1");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
StringBuffer response = new StringBuffer();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
System.out.println(response.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用 HttpURLConnection
还可以发送 POST、PUT、DELETE 等请求,只需修改 setRequestMethod
的参数即可。注意,在发送 POST 请求时需要设置 RequestProperty 来指定请求的 Content-Type。
HttpClient
是 Apache 的一个开源项目,它为我们提供了一个更加高级的 HTTP 客户端,支持多种请求方法、连接池、cookie 管理等功能。以下是一个使用 HttpClient
发送 GET 请求的示例:
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
public class HttpExample {
public static void main(String[] args) {
try {
HttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet("https://jsonplaceholder.typicode.com/posts/1");
org.apache.http.HttpResponse response = client.execute(request);
String responseBody = EntityUtils.toString(response.getEntity());
System.out.println(responseBody);
} catch (Exception e) {
e.printStackTrace();
}
}
}
HttpClient
支持连接池和线程池,可以大幅度提高请求效率。但是需要注意,HttpClient
的 API 版本不兼容,对于 Java 9 以上建议使用 HttpClient
自带的 HttpClient
类。
OkHttp
是 Square 公司开源的一个高效、简单、易用的 HTTP 客户端,它支持 HTTP/2 标准,与 Retrofit 搭配使用可以大幅度提高开发效率。以下是一个使用 OkHttp
发送 GET 请求的示例:
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class HttpExample {
public static void main(String[] args) {
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts/1")
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用 OkHttp
可以通过链式调用的方式快速设置请求头、参数等信息,十分方便。另外,OkHttp
还支持自动重试、websocket、缓存等功能。
以上是 Java 发送请求的三种方式,具体使用哪种方式取决于具体的需求和项目情况。需要注意的是,在使用 HttpClient
和 OkHttp
的时候需要引入相应的依赖库。