使用Python Flask获取curl传来的JSON数据

本文介绍了如何通过curl命令以POST方式传递字典类型的数据到Flask应用,并在Python Flask中使用request.json获取这些数据。同时,展示了在URL中携带参数的curl请求方法,以及如何在Flask应用中通过request.args获取URL参数。

一、POST传送参数

使用curl命令传送字典:

curl http://192.168.1.10:5000/upload -X POST -d '{"hello": "world"}' --header "Content-Type: application
/json"

使用Python Flask的request.json获取字典数据:

from flask import Flask, request
app = Flask(__name__)

@app.route("/upload", methods=["POST"])
def save_file():
    print("start...")
    # 获取json数据
    print(type(request.json))
    print(request.json['hello'])
    
    print("end...")
    return "已接收保存\n"

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

二、URL中传递参数

也可以使用在URL中携带参数:

curl http://192.168.68.10:5000/upload?info=1233232 -X POST --header "Content-Type: application/json"
from flask import Flask, request
app = Flask(__name__)

@app.route("/upload", methods=["POST"])
def save_file():
    print("start...")
    # 从URL里获取参数
    print(request.args.__str__())
    print(request.args.get('info'))

    print("end...")
    return "已接收保存\n"

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

参考:

1. https://www.letianbiji.com/python-flask/py-flask-json.html

2. Python flask 实现文件发送和接收保存

### 同时接收文件和 JSON 数据的方法 在 Flask 中,`request.files` 用于处理上传的文件,而 `request.json` 或者 `request.form` 则分别用于解析 JSON 数据或者表单数据。如果需要同时支持文件上传和 JSON 数据传输,则需要注意请求的内容类型设置以及客户端发送方式。 以下是具体实现方法: #### 客户端配置 为了能够同时传递文件和 JSON 数据,建议使用 multipart/form-data 的形式提交数据。在这种情况下,JSON 数据可以被序列化为字符串并通过 form 表单项的方式传递给服务器[^1]。 #### 服务端代码示例 以下是一个完整的 Flask 示例代码,展示如何同时接收文件和 JSON 数据: ```python from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/upload', methods=['POST']) def upload(): # 获取上传的文件 uploaded_file = request.files.get('file') if not uploaded_file: return jsonify({"error": "No file part"}), 400 # 将接收到的文件保存到本地或其他操作 filename = uploaded_file.filename uploaded_file.save(filename) # 解析附加的 JSON 数据(假设通过 'data' 字段传入) json_data_str = request.form.get('json_data') try: # 将 JSON 字符串转换为字典对象 json_data = dict(eval(json_data_str)) # 使用 eval 转换字符串为字典 except Exception as e: return jsonify({"error": f"Invalid JSON data: {str(e)}"}), 400 response_message = { "filename": filename, "received_json": json_data } return jsonify(response_message), 200 if __name__ == '__main__': app.run(debug=True) ``` 上述代码中: - 文件通过 `request.files.get('file')` 提取。 - JSON 数据作为字符串存储在名为 `'json_data'` 的表单字段中,并通过 `eval()` 方法将其转化为 Python 字典对象[^3]。 #### 测试命令 (Curl 命令) 可以通过 curl 工具来测试该接口的功能: ```bash curl -X POST http://localhost:5000/upload \ -F "file=@/path/to/local/file.txt" \ -F "json_data={'key':'value'}" ``` 此命令会向 `/upload` 接口发送一个包含文件和 JSON 数据的 HTTP 请求。 --- ### 注意事项 当采用这种方式时,请确保前端或调用方正确设置了 Content-Type 头部为 multipart/form-data 并按照约定格式提供参数名称(如这里的 `'file'` 和 `'json_data'`)。另外,在生产环境中应增加更多的验证逻辑以保障安全性与稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值