跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Java HttpURLConnection
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Java HttpURLConnection = '''HttpURLConnection''' 是 Java 标准库(`java.net` 包)提供的一个类,用于发送 HTTP 请求并处理 HTTP 响应。它是基于 URLConnection 的抽象类,专门用于 HTTP/HTTPS 协议。HttpURLConnection 提供了一种简单的方式来与 Web 服务器进行交互,支持 GET、POST、PUT、DELETE 等 HTTP 方法,并可以处理请求头、响应头和状态码。 == 基本介绍 == HttpURLConnection 是一个轻量级的 HTTP 客户端,适用于简单的 HTTP 请求场景。它不需要额外的依赖库(如 Apache HttpClient 或 OkHttp),因此在小型项目或需要原生 Java 支持的场景下非常有用。 === 主要特点 === * 支持 HTTP 和 HTTPS 协议。 * 可以设置请求方法(GET、POST、PUT、DELETE 等)。 * 允许自定义请求头(Headers)。 * 可以读取和写入请求体(Request Body)。 * 提供响应状态码、响应头和响应体的访问。 == 基本用法 == 以下是一个简单的示例,展示如何使用 HttpURLConnection 发送一个 GET 请求并读取响应: <syntaxhighlight lang="java"> import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpURLConnectionExample { public static void main(String[] args) throws Exception { // 1. 创建 URL 对象 URL url = new URL("https://jsonplaceholder.typicode.com/posts/1"); // 2. 打开 HTTP 连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 3. 设置请求方法(默认为 GET) connection.setRequestMethod("GET"); // 4. 获取响应码 int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); // 5. 读取响应内容 if (responseCode == HttpURLConnection.HTTP_OK) { // HTTP 200 BufferedReader reader = new BufferedReader( new InputStreamReader(connection.getInputStream()) ); String line; StringBuilder response = new StringBuilder(); while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); System.out.println("Response Body: " + response.toString()); } else { System.out.println("Request failed with status: " + responseCode); } // 6. 关闭连接 connection.disconnect(); } } </syntaxhighlight> === 输出示例 === <pre> Response Code: 200 Response Body: { "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" } </pre> == 进阶用法 == === 发送 POST 请求 === HttpURLConnection 也可以用于发送 POST 请求,并附带请求体(如 JSON 数据)。以下是一个示例: <syntaxhighlight lang="java"> import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class HttpPostExample { public static void main(String[] args) throws Exception { URL url = new URL("https://jsonplaceholder.typicode.com/posts"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方法为 POST connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true); // 允许写入请求体 // 构造 JSON 请求体 String jsonInput = "{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}"; // 写入请求体 try (OutputStream os = connection.getOutputStream()) { byte[] input = jsonInput.getBytes("utf-8"); os.write(input, 0, input.length); } // 读取响应 int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); if (responseCode == HttpURLConnection.HTTP_CREATED) { // HTTP 201 // 读取响应内容(类似 GET 示例) // ... } connection.disconnect(); } } </syntaxhighlight> === 设置请求头 === 可以通过 `setRequestProperty` 方法设置自定义请求头: <syntaxhighlight lang="java"> connection.setRequestProperty("User-Agent", "MyJavaApp/1.0"); connection.setRequestProperty("Authorization", "Bearer token123"); </syntaxhighlight> === 处理重定向 === HttpURLConnection 默认会自动处理 HTTP 重定向(3xx 状态码)。如果需要禁用重定向,可以设置: <syntaxhighlight lang="java"> connection.setInstanceFollowRedirects(false); </syntaxhighlight> === 超时设置 === 可以设置连接超时和读取超时(单位:毫秒): <syntaxhighlight lang="java"> connection.setConnectTimeout(5000); // 5 秒连接超时 connection.setReadTimeout(10000); // 10 秒读取超时 </syntaxhighlight> == 实际应用场景 == HttpURLConnection 适用于以下场景: * 调用 REST API 获取或提交数据。 * 爬取网页内容(需遵守 robots.txt 规则)。 * 与微服务或其他 HTTP 服务交互。 * 在 Android 应用中进行网络请求(注意:Android 推荐使用更现代的库如 OkHttp)。 == 注意事项 == * **线程安全**:HttpURLConnection 不是线程安全的,每个请求应使用独立的实例。 * **异常处理**:网络请求可能抛出 `IOException`,应妥善处理。 * **性能**:对于高频请求,建议使用连接池(如 Apache HttpClient)。 * **HTTPS**:默认支持 HTTPS,但可能需要配置信任证书(如自签名证书)。 == 总结 == HttpURLConnection 是 Java 标准库提供的 HTTP 客户端工具,适用于简单的 HTTP 请求。虽然功能不如第三方库(如 Apache HttpClient 或 OkHttp)强大,但在不需要复杂功能的情况下,它是一个轻量级的选择。 === 流程图示例 === <mermaid> graph TD A[创建 URL 对象] --> B[打开 HttpURLConnection] B --> C[设置请求方法] C --> D[设置请求头] D --> E[写入请求体(POST/PUT)] E --> F[发送请求] F --> G[获取响应码] G --> H{成功?} H -->|是| I[读取响应体] H -->|否| J[处理错误] I --> K[关闭连接] J --> K </mermaid> == 参见 == * [[Java URLConnection]] * [[Java 网络编程]] * [[REST API 调用]] [[Category:编程语言]] [[Category:Java]] [[Category:Java网络编程]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)