跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Java URLConnection
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Java URLConnection = '''Java URLConnection''' 是 Java 网络编程中的一个核心类,用于建立与 URL 所指向资源的连接,并支持读取和写入操作。它是 `java.net` 包的一部分,提供了比 `URL` 类更细粒度的控制,适用于 HTTP、HTTPS、FTP 等协议。本文将详细介绍其工作原理、使用方法及实际应用。 == 概述 == URLConnection 是一个抽象类,代表应用程序和 URL 之间的通信链接。它允许开发者: * 发送请求并接收响应 * 设置请求头(如 User-Agent、Content-Type) * 处理重定向和缓存 * 读取和写入数据流 其子类包括: * `HttpURLConnection`(用于 HTTP/HTTPS) * `JarURLConnection`(用于 JAR 协议) * 其他协议特定的实现 == 基本用法 == 以下是一个简单的示例,展示如何使用 URLConnection 读取网页内容: <syntaxhighlight lang="java"> import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class URLConnectionExample { public static void main(String[] args) { try { // 创建URL对象 URL url = new URL("https://example.com"); // 打开连接 URLConnection connection = url.openConnection(); // 读取响应 BufferedReader reader = new BufferedReader( new InputStreamReader(connection.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } catch (Exception e) { e.printStackTrace(); } } } </syntaxhighlight> '''输出示例:''' <pre> <!doctype html> <html> <head> <title>Example Domain</title> ... </head> <body> <h1>Example Domain</h1> ... </body> </html> </pre> == 核心功能 == === 请求头设置 === 可以通过 `setRequestProperty` 方法自定义请求头: <syntaxhighlight lang="java"> URLConnection connection = url.openConnection(); connection.setRequestProperty("User-Agent", "MyJavaApp/1.0"); connection.setRequestProperty("Accept-Language", "en-US"); </syntaxhighlight> === 写入数据 === 要向服务器发送数据(如 POST 请求): <syntaxhighlight lang="java"> URLConnection connection = url.openConnection(); connection.setDoOutput(true); // 启用输出 try (OutputStream os = connection.getOutputStream()) { os.write("param1=value1¶m2=value2".getBytes()); } </syntaxhighlight> === 超时控制 === 设置连接和读取超时(毫秒): <syntaxhighlight lang="java"> connection.setConnectTimeout(5000); // 5秒连接超时 connection.setReadTimeout(10000); // 10秒读取超时 </syntaxhighlight> == HTTP 特定功能 == 对于 HTTP 协议,通常使用其子类 `HttpURLConnection`: <syntaxhighlight lang="java"> HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); httpConn.setRequestMethod("POST"); // 设置请求方法 int responseCode = httpConn.getResponseCode(); // 获取状态码 </syntaxhighlight> == 实际案例:天气API查询 == 以下示例演示如何用 URLConnection 查询开放天气API: <syntaxhighlight lang="java"> import org.json.JSONObject; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class WeatherAPI { public static void main(String[] args) { String apiKey = "YOUR_API_KEY"; String city = "London"; String urlString = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "&appid=" + apiKey; try { URL url = new URL(urlString); URLConnection conn = url.openConnection(); BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream())); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); JSONObject json = new JSONObject(response.toString()); System.out.println("Temperature: " + json.getJSONObject("main").getDouble("temp") + "K"); } catch (Exception e) { e.printStackTrace(); } } } </syntaxhighlight> '''输出示例:''' <pre> Temperature: 285.15K </pre> == 高级主题 == === 处理重定向 === 默认情况下,HttpURLConnection 会自动处理重定向。可以通过以下方式禁用: <syntaxhighlight lang="java"> HttpURLConnection.setFollowRedirects(false); // 全局设置 // 或 httpConn.setInstanceFollowRedirects(false); // 单实例设置 </syntaxhighlight> === 性能优化 === 对于频繁的请求,考虑: 1. 使用连接池(如 Apache HttpClient) 2. 启用缓存(如果服务器支持) 3. 复用连接(HTTP Keep-Alive) == 安全注意事项 == * 总是验证 HTTPS 证书 * 对用户输入进行清理以防止注入攻击 * 不要硬编码敏感信息(如 API 密钥) == 常见问题 == {| class="wikitable" |- ! 问题 !! 解决方案 |- | 连接超时 || 检查网络或增加超时时间 |- | 403 Forbidden || 检查请求头和权限 |- | 乱码响应 || 正确设置字符编码 |} == 总结 == URLConnection 提供了灵活的网络通信能力,适合各种协议和复杂场景。对于现代 HTTP 开发,可以考虑更高级的库如 HttpClient(Java 11+)或第三方库如 OkHttp,但理解 URLConnection 的工作原理仍是 Java 网络编程的重要基础。 == 参见 == * [[Java网络编程]] * [[Java HttpURLConnection]] * [[Java Socket编程]] [[Category:编程语言]] [[Category:Java]] [[Category:Java网络编程]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)