引言:为什么URLConnection是Java开发者的必备知识
您是否曾想过,您喜爱的浏览器或移动应用程序是如何与服务器通信的?这种魔力隐藏在简单而强大的HTTP请求中。而在Java中,有一个“瑞士军刀”类——java.net.URLConnection。
尽管Java 11中引入了新的模块化HttpClient,但全球仍有成千上万的开发者继续使用久经考验的URLConnection。为什么?首先,有遗留代码需要维护。其次,它简单且不需要第三方库。第三,理解底层HTTP请求的工作原理能让您成为真正的专家。
在本文中,我们不会简单地从Stack Overflow复制答案。我们将分析使用URLConnection的两种方法,并将其与现代HttpClient进行比较。您将学习如何发送GET和POST请求、处理错误、设置标头以及读取服务器响应。让我们开始吧!
什么是java.net.URLConnection,为什么需要它?
java.net.URLConnection类是一个抽象类,表示与URL指定资源的活动连接。简单来说:它是您的Java应用程序与互联网服务器之间的桥梁。它可以:
- 打开与服务器的连接
- 发送数据(GET、POST、PUT、DELETE)
- 读取服务器响应
- 管理请求和响应标头
- 处理Cookie
但有一个细微之处:URLConnection本身并不做任何事情。它只提供机制。所有魔法都由其子类完成——例如,用于处理HTTP的HttpURLConnection。
方法1:使用HttpURLConnection的经典方式(久经考验)
这种方法被Java编程的奠基者们所使用。它可靠,但需要手动操作。让我们通过一个GET请求示例来解析它。
示例1:带响应处理的GET请求
import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;
public class GetRequestExample { public static void main(String[] args) throws Exception { // 1. 创建URL对象 URL url = new URL("https://api.github.com/users/octocat"); // 2. 打开连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 3. 配置请求 connection.setRequestMethod("GET"); connection.setRequestProperty("User-Agent", "Mozilla/5.0"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); // 4. 检查响应代码 int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); // 5. 读取响应体 if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader( new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println("Response Body: " + response.toString()); } else { System.out.println("GET request failed"); } // 6. 关闭连接 connection.disconnect(); }}代码解析:
setRequestMethod— 设置HTTP方法(GET、POST、PUT、DELETE)setRequestProperty— 设置标头(User-Agent、Content-Type等)博客
书籍推荐
推荐阅读