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

HttpURLConnection获取错误响应问题求助

解决HttpURLConnection读取PHP返回加密JS的问题

兄弟,这明显是目标服务器把你的请求当成爬虫拦截了!你的HttpURLConnection发的请求太“素”了,没有浏览器的标识,服务器直接返回了加密的JS脚本(大概率是要验证你是不是真人,或者得靠JS解密才能拿到你要的hello there)。

下面给你几个逐步排查的解决方案:

1. 先模拟浏览器的请求头(最常用也最容易生效)

服务器判断请求是否合法,第一个看的就是User-Agent头,你得把它改成主流浏览器的标识,比如Chrome的:

HttpURLConnection conn = (HttpURLConnection) new URL("你的PHP文件地址").openConnection();
// 核心:设置浏览器的User-Agent
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36");
// 可选:补充其他浏览器常用头,让请求更逼真
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8");
conn.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
conn.setRequestProperty("Connection", "keep-alive");

// 然后正常读取输入流
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
StringBuilder content = new StringBuilder();
while ((line = reader.readLine()) != null) {
    content.append(line);
}
reader.close();
System.out.println(content.toString());

先试试这个,大部分简单的反爬拦截靠这个就能解决。

2. 处理Cookie(如果模拟头后还是不行)

有些服务器会先给你返回Cookie,后续请求必须带上这个Cookie才能拿到真实内容。你可以用Java的CookieManager自动管理:

// 先初始化Cookie管理器,全局生效
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);

// 然后再发起上面的请求,会自动保存和携带Cookie
HttpURLConnection conn = (HttpURLConnection) new URL("你的PHP文件地址").openConnection();
// 同样设置User-Agent等头...

3. 如果还是返回加密JS,得执行JS解密逻辑

如果服务器的验证更严格,返回的JS是用来解密真实内容的,那你得分析JS的加密逻辑(比如AES加密的密钥、偏移量),然后用Java执行这段JS或者自己实现解密。

举个简单例子,用Java自带的Nashorn引擎执行解密:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
// 把服务器返回的JS代码(包括toNumbers这类函数和核心解密逻辑)复制进来
engine.eval("这里粘贴返回的完整JS代码");
// 假设解密需要调用某个函数,比如decrypt(加密内容),你得先找到加密后的内容
String realContent = (String) engine.eval("decrypt('服务器返回的加密字符串')");
System.out.println(realContent);

不过这种情况需要你仔细分析JS代码,找到解密的入口和参数,稍微麻烦一点。

4. 排查其他限制

如果上面都不行,可能是服务器限制了请求频率或者IP,这时你可以:

  • 降低请求频率,比如加个Thread.sleep(1000)
  • 换个代理IP再试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:17:41