You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Java代码读取部分HTTPS页面时报HTTP 403响应码错误?

问题产生原因
  • 反爬策略拦截:research.investors.com站点部署了反爬机制,Java原生HTTP客户端默认的请求特征(比如自带的User-Agent值为Java/版本号)会被直接识别为爬虫,返回403拒绝访问;而maven.apache.org没有这类严格的反爬校验,所以可以正常访问。
  • 请求头缺失:目标站点会校验User-Agent、Accept、Accept-Language等常规浏览器请求头,缺少这些头的请求会被判定为非法请求。
  • Cookie校验缺失:部分站点首次访问会下发会话Cookie,后续请求需要携带对应Cookie才能正常访问,Java原生客户端默认不会自动处理Cookie。
  • TLS指纹校验:部分站点的WAF会校验TLS握手阶段的客户端指纹,Java原生HTTP客户端的TLS指纹和普通浏览器差异较大,容易被识别拦截。
解决方法

方案1:补充合法请求头(适配原生HttpURLConnection)

主动添加浏览器标准请求头,核心是替换默认的User-Agent为真实浏览器的标识,同时开启自动Cookie处理:

import java.net.*;
import java.io.*;
import java.nio.charset.StandardCharsets;

// 全局启用自动Cookie处理
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);

URL url = new URL("https://research.investors.com/stock-quotes/nyse-sailpoint-tech-holdings-sail.htm");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 模拟Chrome浏览器的请求头
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36");
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
conn.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8");
conn.setRequestProperty("Connection", "keep-alive");

// 读取响应逻辑
try (InputStream is = conn.getInputStream();
     BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
    String line;
    StringBuilder content = new StringBuilder();
    while ((line = reader.readLine()) != null) {
        content.append(line);
    }
    System.out.println(content);
} finally {
    conn.disconnect();
}

方案2:更换成熟HTTP客户端(推荐)

如果原生客户端还是被拦截,推荐使用OkHttp等工业级HTTP客户端,它的TLS指纹更接近真实浏览器,且原生支持自动Cookie管理、连接池等能力,被拦截的概率更低。
首先添加Maven依赖:

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version>
</dependency>

调用示例:

import okhttp3.*;
import java.net.CookieManager;

OkHttpClient client = new OkHttpClient.Builder()
    .cookieJar(new JavaNetCookieJar(new CookieManager()))
    .build();

Request request = new Request.Builder()
    .url("https://research.investors.com/stock-quotes/nyse-sailpoint-tech-holdings-sail.htm")
    .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
    .build();

try (Response response = client.newCall(request).execute()) {
    if (response.isSuccessful()) {
        String htmlContent = response.body().string();
        // 处理返回的页面内容
    }
}

提示:请严格遵守目标站点的使用条款和robots.txt规则,控制请求频率,避免对站点服务造成不必要的压力。

内容的提问来源于stack exchange,提问作者alin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:57:02