我们主要讲最常见的两种方法:java原生自带的 和 第三方好用的库。
第一部分:java 自带的“工具包”(java.net包)
java自己就提供了一些基础的通信工具,就像家里自带的基本工具箱。
方法1:httpurlconnection (最经典的基础方法)
步骤:
- 找到对方的地址(创建url对象)。
- 打开一个连接通道(打开httpurlconnection)。
- 设置这次沟通的规则(设置请求方法:get、post等)。
- 准备听对方回复(获取响应代码和输入流)。
- 读取对方说的话(读取输入流,得到数据)。
- 最后收拾干净(关闭连接)。
举个例子(get请求):
import java.io.bufferedreader;
import java.io.inputstreamreader;
import java.net.httpurlconnection;
import java.net.url;
public class basichttpexample {
public static void main(string[] args) {
try {
// 1. 确定服务员地址(api地址)
string urlstring = "https://api.example.com/data";
url url = new url(urlstring);
// 2. 打开连接通道
httpurlconnection connection = (httpurlconnection) url.openconnection();
// 3. 设置沟通规则:这次我们去“获取”信息(get)
connection.setrequestmethod("get");
// 4. 看看服务员反应如何(http状态码 200表示成功)
int responsecode = connection.getresponsecode();
system.out.println("响应代码: " + responsecode);
if (responsecode == httpurlconnection.http_ok) { // 200
// 5. 读取服务员返回的话(数据)
bufferedreader in = new bufferedreader(new inputstreamreader(connection.getinputstream()));
string inputline;
stringbuilder content = new stringbuilder();
while ((inputline = in.readline()) != null) {
content.append(inputline);
}
// 6. 把读到的话打印出来
system.out.println("响应内容: " + content.tostring());
// 7. 收拾干净
in.close();
}
// 8. 断开连接
connection.disconnect();
} catch (exception e) {
e.printstacktrace();
}
}
}优点:java自带,无需额外下载。
缺点:代码比较冗长,手动处理的东西多(比如拼接复杂的post参数),不够现代和优雅。
第二部分:使用好用的“第三方工具”
因为原生的工具用起来有点麻烦,所以社区创造了更好用的库。
方法2:apache httpclient (一个非常流行和强大的库)
如何使用:
- 首先,你需要把这个“工具套装”添加到你的项目中。
- 使用maven,在pom.xml里添加依赖
- 使用它的api来发送请求。
举个例子(get请求):
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 apachehttpclientexample {
public static void main(string[] args) {
// 1. 创建一辆智能快递车(httpclient实例)
try (closeablehttpclient httpclient = httpclients.createdefault()) {
// 2. 写明送货地址(创建httpget请求)
httpget request = new httpget("https://api.example.com/data");
// 3. 发送请求,并拿到回执(执行请求,获取响应)
try (closeablehttpresponse response = httpclient.execute(request)) {
// 4. 检查回执状态(状态码)
system.out.println("响应代码: " + response.getstatusline().getstatuscode());
// 5. 从回执里拿出包裹内容(响应实体)
string responsebody = entityutils.tostring(response.getentity());
system.out.println("响应内容: " + responsebody);
}
} catch (exception e) {
e.printstacktrace();
}
// 注意:这里用了try-with-resources语法,会自动关闭车和回执,不用手动disconnect。
}
}优点:功能强大,支持https、连接池、cookie管理等高级特性,api比原生友好。
方法3:okhttp (一个更现代、高效的库)
在android和现代java应用中非常流行。
如何使用:
同样需要先添加依赖到项目。
举个例子(get请求):
import okhttp3.okhttpclient;
import okhttp3.request;
import okhttp3.response;
public class okhttpexample {
public static void main(string[] args) {
// 1. 创建一辆跑车(okhttpclient实例)
okhttpclient client = new okhttpclient();
// 2. 构建一个送货请求单(request)
request request = new request.builder()
.url("https://api.example.com/data")
.build();
// 3. 用跑车发出请求单,并拿到回执(response)
try (response response = client.newcall(request).execute()) {
// 4. 检查回执状态和内容
system.out.println("响应代码: " + response.code());
if (response.body() != null) {
string responsebody = response.body().string();
system.out.println("响应内容: " + responsebody);
}
} catch (exception e) {
e.printstacktrace();
}
}
}优点:api设计非常简洁优雅,默认支持http/2,性能好,是现代java/kotlin开发的首选之一。
第三部分:spring框架的“快捷方式”(resttemplate 和 webclient)
方法4:resttemplate (spring的同步传送门)
spring家族的老牌成员。你告诉它地址,它直接帮你把远处的数据“拿”回来,甚至能自动转换成java对象。
// 需要在spring项目环境中
import org.springframework.web.client.resttemplate;
public class springresttemplateexample {
public static void main(string[] args) {
resttemplate resttemplate = new resttemplate();
string url = "https://api.example.com/data";
// 发送get请求,并将响应直接转换为string类
string result = resttemplate.getforobject(url, string.class);
system.out.println(result);
}
}特点:超级简单,但它是同步的(发请求后必须等回复,期间线程会阻塞)。
方法5:webclient (spring的异步、响应式传送门)
spring家族的新星,支持非阻塞的异步请求,性能更高,适合处理大量并发请求。
// 需要在spring webflux项目环境中
import org.springframework.web.reactive.function.client.webclient;
public class springwebclientexample {
public static void main(string[] args) {
webclient client = webclient.create();
client.get()
.uri("https://api.example.com/data")
.retrieve()
.bodytomono(string.class) // 这里返回的是“承诺”,而不是立即得到结果
.subscribe(result -> system.out.println(result)); // 结果未来好了,会在这里打印
// 主线程不会阻塞,可以继续做别的事情
system.out.println("请求已发出,我在做别的事...");
}
}总结与建议
| 方法 | 适合场景 | 难度 | 备注 |
|---|---|---|---|
| httpurlconnection | 学习原理、简单小工具、环境受限(不能加库) | 中等 | 初学者建议从这里开始理解概念 |
| apache httpclient | 传统企业项目,需要丰富功能和稳定支持 | 中等 | 功能全,但api稍旧 |
| okhttp | 现代java/android应用,追求简洁和性能 | 容易 | 对于新项目,这是非常推荐的选择 |
| resttemplate | 传统的spring boot项目,简单同步调用 | 非常容易 | spring生态,已进入维护模式 |
| webclient | 响应式、高并发的spring项目 | 中等 | spring未来的方向,支持异步 |
到此这篇关于java中调用url请求的5种常见方法详解的文章就介绍到这了,更多相关java调用url请求内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论