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
相关产品推荐
相关产品推荐

