Java:
发出 HTTP 请求
How to: 怎么做?
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class HttpExample {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://example.com"))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
输出样例:
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
</html>
Deep Dive 深度挖掘
HTTP请求的发送可以追溯到Web的早期时候。早期,Java使用HttpURLConnection
,但这不太灵活且使用起来繁琐。Java 11引入了新的HTTP客户端API,它支持HTTP/2协议、同步和异步编程模型。与老式的HttpURLConnection
相比,新API设计更为现代,易于使用,可以与Lambda表达式和Stream API结合起来使用。
替代方案包括Apache HttpClient、OkHttp和Retrofit。每个在特定场景下都有优势,例如Apache HttpClient功能强大但学习曲线较陡,OkHttp对Android优化良好,Retrofit则是适合REST API的高层抽象。
发送HTTP请求的实现细节需要注意的是连接管理、错误处理和性能问题。例如,维护HTTP连接池可以提高性能,正确处理HTTP响应码可以更好地管理程序逻辑。