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

Python requests发送POST请求提交JSON返回404错误问题求助

排查结论

404错误是请求路径和后端路由不匹配导致的,除此之外前后端代码还有3处会导致请求失败的逻辑问题,逐一修正即可:

  • 路径不匹配问题:后端注册的POST路由为/api/add,Python代码里写的请求地址是/api/places,服务器找不到对应资源直接返回404,把请求URL改成https://f053a068dd0ea6.lhrtunnel.link/api/add即可解决404问题。
  • Python端传参错误:当前data='./j.json'的写法是把字符串./j.json当成请求体发送,既没有读取本地JSON文件内容,也没有设置正确的JSON请求头,后端无法解析到参数。
  • 后端缺少请求体解析配置:Express默认不会解析JSON格式请求体,没有配置express.json()中间件的话,req.body会是undefined,拿不到任何传入参数。
  • 后端SQL拼接存在注入风险:直接把用户传入的参数拼到SQL语句里,存在严重SQL注入漏洞,建议改用参数化查询。

修正后可运行代码

Python端

import requests
import json

url = "https://f053a068dd0ea6.lhrtunnel.link/api/add"
# 读取本地JSON文件内容
with open("./j.json", "r", encoding="utf-8") as f:
    payload = json.load(f)
# 用json参数自动序列化数据、设置正确请求头
resp = requests.post(url, json=payload)
print(resp.status_code, resp.text)

Node.js/Express后端

在路由定义前添加JSON解析中间件,同时修改SQL为参数化写法:

const express = require('express')
const app = express()
// 必须在路由定义前添加,否则无法解析JSON请求体
app.use(express.json())

app.post('/api/add', (req, res) => {
  const {place_name, score, description, img_url, address} = req.body;
  // 参数化查询避免SQL注入
  const insertSql = "INSERT INTO place VALUES (0, ?, ?, ?, ?, ?)";
  const sqlParams = [place_name, score, description, img_url, address];
  connection.query(insertSql, sqlParams, (error, rows) => {
    if(error) {
      console.error(error);
      return res.status(500).send({msg: "插入失败", error});
    }
    res.send(rows);
  })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:18:09