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

Python通过requests发送JSON到PHP(Laravel)接口返回空如何排查?

问题1:Laravel获取表单参数的方式错误

你使用$request->json的写法是错误的:Laravel的Request类中json是方法而非属性,专门用于获取请求体为纯JSON格式的输入内容。而你Python侧是以表单(x-www-form-urlencoded/form-data)格式传参,参数名为json,正确获取指定表单参数的方式是调用input方法:

$jsonStr = $request->input('json');

问题2:json_decode结果直接输出会异常

json_decode默认会将JSON字符串转为PHP对象,你传入的是数组结构,解码后为PHP数组/对象,直接用echo输出会抛出类型警告,最终返回空内容。如果只是测试打印接收到的原始JSON数据,直接输出未解码的字符串即可,也可以用var_dump/print_r打印解码后的结构:

public function Store(Request $request) {
    // 直接打印收到的原始JSON字符串
    echo $request->input('json');
    
    // 如需查看解码后的结构,使用下方写法
    // $decoded = json_decode($request->input('json'), true); // 第二个参数true表示转关联数组
    // var_dump($decoded);
}

可选优化:直接传递JSON请求体更规范

如果不需要走表单提交逻辑,更通用的做法是Python侧直接把JSON放到请求体中,不需要额外套一层表单参数:

elements = [{'id': 1, 'name': 'Alex'}, {'id': 2, 'name': 'Jessica'}]
requests.post('http://localhost:8000/api/add-element', json=elements)

此时Laravel侧可以直接用json方法获取解析后的内容:

public function Store(Request $request) {
    print_r($request->json()->all());
}

Postman测试为空的原因

Postman测试为空和传参格式选择有关:测试原有写法时,需要在Postman的Body选项卡选择x-www-form-urlencoded或form-data,添加key为json、value为对应JSON字符串即可,不要直接选择raw->JSON格式传参,否则后端无法拿到json参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 10:54:03