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

使用JSON发送POST请求调用Flask API时遭遇500内部服务器错误

问题原因与解决方法

你遇到的问题核心是requests库的json参数用法错误:

  • 当你用json=myjsonobj传入json.dumps()生成的字符串时,requests会把这个字符串当作JSON的原始值发送,相当于后端收到的是一个被双重编码的JSON(比如"{\"user\":\"xxx\",...}")。Flask后端用request.get_json()解析时,得到的是一个字符串而非预期的字典,直接导致解析失败,返回500错误。
  • 而手动构造字典传入时,requests会自动把字典序列化为正确的JSON字符串,并设置Content-Type: application/json请求头,后端能正常解析。

修正后的代码

直接传入原始字典即可,不需要手动调用json.dumps():

import requests

def sendpushoverapi(user, title, content, priority=0, url='', urltitle=''):
    posturl = 'http://192.168.1.96:5000/spo'
    myobj = {
        "user": user,
        "title": title,
        "message_content": content,
        "priority": priority,
        "url": url,
        "url_title": urltitle
    }

    # 直接传字典给json参数,requests会自动处理序列化和请求头
    x = requests.post(posturl, json=myobj)
    print(x.text)

补充说明

如果非要手动序列化JSON字符串(不推荐),需要用data参数并手动设置请求头:

import requests
import json

def sendpushoverapi(user, title, content, priority=0, url='', urltitle=''):
    posturl = 'http://192.168.1.96:5000/spo'
    myobj = {
        "user": user,
        "title": title,
        "message_content": content,
        "priority": priority,
        "url": url,
        "url_title": urltitle
    }

    myjsonobj = json.dumps(myobj)
    # 用data传字符串,手动设置Content-Type
    x = requests.post(posturl, data=myjsonobj, headers={"Content-Type": "application/json"})
    print(x.text)

但第一种方法更简洁,也符合requests库的设计初衷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:31:06