为何Dev Tools显示JSON响应,浏览器/Postman等却返回HTML?
问题解惑:为何DevTools显示JSON响应但其他工具返回HTML
核心原因
- 请求头不匹配:DevTools里的请求是页面前端发起的,会携带
Accept: application/json这类指定接收JSON的请求头;而浏览器直接访问、Postman或Python请求默认的Accept头是text/html,服务器会根据这个字段返回对应的格式内容。 - Cloudflare防护拦截:目标网站大概率部署了Cloudflare,直接发起请求会触发人机验证逻辑,服务器返回验证页面的HTML;而DevTools里的请求是在浏览器已通过验证的会话中发起的,带着有效会话Cookie,所以能拿到正常JSON响应。
- 单页应用路由混淆:如果网站是Angular这类单页应用,你直接访问的URL是前端路由地址,服务器返回的是SPA的入口HTML;但DevTools里看到的JSON是前端页面内部调用的真实API接口的响应,你可能误把前端路由URL当成了API接口URL。
验证与解决思路
- 核对请求URL:仔细看DevTools中返回JSON的请求的完整URL,确认和你直接访问的URL是否一致,很多时候SPA页面URL和API接口URL是不同的。
- 复用请求头:把DevTools里那个返回JSON的请求的所有请求头(包括
Accept、Cookie、User-Agent)复制到Postman或Python请求里,再发起请求,大概率能拿到JSON。 - 处理Cloudflare验证:如果返回的是验证页面,先在浏览器中打开目标页面完成人机验证,然后把浏览器的Cookie复制到请求中,再发起请求即可绕过验证。
内容的提问来源于stack exchange,提问作者hafidzaini
相关产品推荐
相关产品推荐

