java.net.URLConnection:如何处理HTTP请求和响应

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么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(); }}


代码解析: