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

使用Django REST Framework时cURL无法显示JSON数据问题

解决Django REST Framework中cURL无法返回JSON数据的问题

我之前学DRF的时候也碰到过一模一样的情况!浏览器能正常拿到200响应和JSON数据,但cURL就是没反应或者返回非预期内容,多半是请求的细节没跟上,咱们逐个排查:

1. 给cURL加上Accept: application/json请求头

浏览器访问API时会自动发送符合要求的Accept头,但cURL默认的请求头可能不满足DRF的格式要求,导致它返回了HTML格式的错误页面(只是你没直观看到而已)。试试用这个命令:

curl -H "Accept: application/json" http://localhost:8000/你的代码片段URI/

2. 检查是否存在重定向问题

如果你的URI末尾没加/,Django默认会返回301重定向到带/的地址,但cURL默认不会自动跟随重定向。这时候你可以:

  • 直接给URI加上末尾的/,比如http://localhost:8000/snippets/
  • 或者给cURL加上-L参数让它自动跟随重定向:
curl -L http://localhost:8000/snippets

3. 用-v参数查看完整请求/响应细节

给cURL加上-v参数,能输出完整的请求头、响应状态码和返回内容,帮你精准定位问题:

curl -v http://localhost:8000/你的代码片段URI/

比如你可能会发现返回的是403状态码(CSRF验证失败),或者响应的Content-Type是text/html而非application/json,这样就能快速找到根因了。

4. 处理CSRF验证(如果适用)

如果你的视图启用了SessionAuthentication(比如需要登录才能访问),那cURL需要带上CSRF Token才能正常请求:

  1. 先获取CSRF Cookie:
curl -c cookies.txt http://localhost:8000/
  1. 从cookies.txt里找到csrftoken的值,再带着Cookie和Token请求:
curl -b cookies.txt -H "X-CSRFToken: 你的CSRF_TOKEN值" http://localhost:8000/你的代码片段URI/

不过普通的只读API,DRF默认的APIView是关闭CSRF验证的,这个情况概率不高,但可以作为最后排查项。

先从加Accept头和-v参数开始试,基本就能解决问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:17:52