无法复现Chrome返回JSON的GET请求,curl执行返回HTML
问题原因与解决方法
核心原因
- 请求头缺失:浏览器向API发起请求时,会携带
Accept: application/json这类头,明确要求服务器返回JSON格式。如果curl命令里没带这个头,服务器可能默认返回HTML页面(比如错误页或跳转页)。 - Cookie会话失效或遗漏:网站可能通过Cookie验证用户会话,复制curl时如果遗漏了浏览器中的有效Cookie,或者Cookie已过期,服务器会拒绝返回API数据,转而返回HTML。
- User-Agent校验:部分服务器会根据请求的User-Agent识别客户端类型,curl默认的User-Agent和Chrome差异很大,可能触发服务器的不同响应逻辑。
- 重定向异常:即使加了
-L跟随重定向,若重定向后的目标是HTML页面,说明请求未通过服务器的前置校验,被引导到了非API路径。
正确复现请求的操作步骤
- 完整复制带所有请求头的curl命令
在Chrome DevTools的Network面板中找到目标API请求,右键选择「Copy as cURL (bash)」,确保复制的命令包含Accept、Cookie、User-Agent这些关键头。示例命令如下:curl 'https://ticket.bolshoi.ru/api/v1/client/shows' \ -H 'Accept: application/json, text/plain, */*' \ -H 'Cookie: 从DevTools复制的完整Cookie内容' \ -H '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' \ -Lkv - 更新有效Cookie
如果复制的Cookie已经过期,回到浏览器的DevTools,重新复制当前会话的Cookie(确保浏览器未关闭,会话处于活跃状态)。 - 手动补充Accept头
若复制的命令里没有Accept: application/json,手动添加该头,强制服务器返回JSON格式响应。 - 排查重定向细节
查看-Lkv输出中的重定向记录,如果请求被多次重定向到HTML页面,说明需要先访问首页获取初始会话Cookie,再发起API请求。 - 逐步排查请求头
若问题仍存在,可逐步删除非必要的请求头,只保留Accept、User-Agent、Cookie,定位是哪个头导致的响应异常。
注意事项
- 频繁用curl请求可能触发网站反爬机制,建议测试时控制请求频率。
- Cookie包含会话敏感信息,不要随意分享给他人。
内容的提问来源于stack exchange,提问作者StuffHappens
相关产品推荐
相关产品推荐

