Java中用HttpURLConnection发起HTTP请求需正确配置连接、设置方法、处理流并关闭资源;它轻量但需手动管理细节,如超时设置、URL编码、异常处理及流关闭。

Java 中用 HttpURLConnection 发起简单 HTTP 请求,核心是正确配置连接、设置请求方法、处理输入输出流,再记得关闭连接。它不依赖第三方库,但需要手动管理细节,稍繁琐却很轻量。
创建连接并设置基本参数
通过 URL.openConnection() 获取连接对象后,需显式转为 HttpURLConnection,并设置关键属性:
- 调用
setRequestMethod("GET")或"POST"指定方法 - 用
setConnectTimeout()和setReadTimeout()避免无限等待(单位毫秒) - 如需发送数据(如 POST 表单),调用
setDoOutput(true) - 可选:用
setRequestProperty("User-Agent", "...")模拟浏览器访问
发送 GET 请求(无参数或带查询参数)
GET 请求通常只需打开输入流读响应。URL 中的参数应提前拼接到地址里(如 "https://api.example.com/data?id=123"):
- 调用
connect()建立连接(也可省略,首次读写时自动触发) - 检查响应码:
int code = connection.getResponseCode();,2xx 表示成功 - 从
connection.getInputStream()读取响应体;若返回 4xx/5xx,改用getErrorStream() - 读完务必关闭流,避免资源泄漏
发送 POST 请求并提交数据
POST 需要写入请求体,并告知服务端数据格式:
立即学习“Java免费学习笔记(深入)”;
- 设置
setDoOutput(true)允许写入 - 添加头:
setRequestProperty("Content-Type", "application/x-www-form-urlencoded") - 获取
getOutputStream(),写入类似"name=张三&age=25"的字符串(注意 URL 编码) - 写完后 flush 并关闭输出流,再读取响应(同 GET)
- 中文等特殊字符必须用
URLEncoder.encode(value, "UTF-8")编码
别忘了异常处理和资源释放
HttpURLConnection 不会自动释放底层 socket,容易引发连接堆积:
- 所有流(
InputStream/OutputStream)和连接本身都应在finally块中关闭 - 捕获
IOException和ProtocolException等常见异常 - JDK 7+ 推荐用 try-with-resources 自动关流(但
HttpURLConnection本身不实现AutoCloseable,需手动关连接)
基本上就这些。虽然不如 OkHttp 或 HttpClient 简洁,但理解 HttpURLConnection 能帮你更扎实地掌握 Java 网络通信底层逻辑。










