Java里使用HttpURLConnection如何发起简单请求_Java基础HTTP连接说明

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 需要写入请求体,并告知服务端数据格式:

  • 设置 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 块中关闭
  • 捕获 IOExceptionProtocolException 等常见异常
  • JDK 7+ 推荐用 try-with-resources 自动关流(但 HttpURLConnection 本身不实现 AutoCloseable,需手动关连接)

基本上就这些。虽然不如 OkHttp 或 HttpClient 简洁,但理解 HttpURLConnection 能帮你更扎实地掌握 Java 网络通信底层逻辑。