上一篇
Java访问网站可通过
HttpURLConnection或第三方库如Apache HttpClient、OkHttp实现,前者基于标准库发起HTTP请求,后者提供更简洁的API和高级功能,如连接池和异步处理。
Java提供了多种方式访问网站,无论是获取网页内容、调用API还是提交数据,以下是详细方法和代码示例:
核心方法及代码实现
HttpURLConnection(Java原生)
适合简单请求,无需第三方库:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class SimpleHttpClient {
public static void main(String[] args) {
try {
// 1. 创建URL对象
URL url = new URL("https://example.com/api/data");
// 2. 打开连接并设置参数
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET"); // 支持GET/POST
conn.setConnectTimeout(5000); // 超时时间(毫秒)
// 3. 获取响应
int status = conn.getResponseCode();
if (status == 200) { // 成功响应
BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream())
);
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
System.out.println("响应内容: " + response.toString());
} else {
System.out.println("请求失败,状态码: " + status);
}
// 4. 关闭连接
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
关键点:
- 设置请求头:
conn.setRequestProperty("User-Agent", "Mozilla/5.0")(模拟浏览器) - POST请求:调用
conn.setDoOutput(true),通过输出流发送数据。
Apache HttpClient(推荐)
适合复杂场景(连接池、重试机制等),需添加依赖:

<!-- Maven依赖 -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
示例代码:
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class AdvancedHttpClient {
public static void main(String[] args) {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// 1. 创建GET请求
HttpGet request = new HttpGet("https://example.com/api/data");
// 2. 设置请求头
request.addHeader("Accept", "application/json");
// 3. 执行请求并处理响应
try (CloseableHttpResponse response = httpClient.execute(request)) {
String result = EntityUtils.toString(response.getEntity());
System.out.println("响应内容: " + result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
优势:
- 自动管理连接池
- 支持HTTPS、重定向、Cookie等
- 更简洁的API
关键注意事项
-
异常处理

- 捕获
IOException处理网络故障 - 检查HTTP状态码(如404、500)
- 捕获
-
HTTPS支持
- Java原生需配置证书:
HttpsURLConnection+SSLContext - HttpClient自动处理(推荐)
- Java原生需配置证书:
-
资源释放
- 关闭连接(
conn.disconnect()) - 使用try-with-resources自动释放资源(如HttpClient)
- 关闭连接(
-
性能优化

- 复用HttpClient实例(避免频繁创建)
- 设置连接超时(
setConnectTimeout)和读取超时(setReadTimeout)
应用场景选择
| 场景 | 推荐方法 |
|---|---|
| 简单GET/POST请求 | HttpURLConnection |
| 高频请求、需要连接池 | Apache HttpClient |
| 异步请求 | HttpClient + Future |
| 现代REST API调用 | Spring RestTemplate 或 WebClient |
安全与合规
- 遵守Robots协议
检查目标网站的robots.txt(如禁止爬取路径)。 - 设置合理请求频率
避免高频请求导致IP被封(添加Thread.sleep())。 - 处理敏感数据
使用HTTPS传输,避免明文传递密码。
引用说明:
- Oracle官方HttpURLConnection文档
- Apache HttpClient官方指南
- 示例代码遵循MIT开源协议,可自由使用。
通过以上方法,您可安全高效地用Java访问网站,根据需求选择合适方案,并始终遵循目标网站的使用条款。
