【问题标题】:How can I send a json data along with a file in a curl request to handle by Flask?如何在 curl 请求中发送 json 数据和文件以由 Flask 处理?
【发布时间】:2017-12-01 07:17:26
【问题描述】:

问题:

我想将带有-F 选项的文件以及带有-d 的json 数据发送到烧瓶路由。但只有我可以实现。

我试过的代码。

curl -X POST -H "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://192.168.150.113/test

烧瓶代码:

@app.route('/test',methods = ['GET', 'POST'])
def test():
if request.method == 'POST':
    data = request.data
data = json.loads(data)
return 'success'

只有文件:

curl -X POST -F file=@sample.txt http://192.168.150.113/test
@app.route('/process' , methods = ['GET', 'POST'])
def process():
if request.method == 'POST':
    f = request.files['file']
if f:
    try:
filename = secure_filename(f.filename)
f.save( os.path.join(app.config['UPLOAD_FOLDER'], filename ))
return 'success'

但是在不发送单独请求的情况下,我想结合这两个 POST 请求并使用烧瓶处理..

有什么办法可以做到吗?

【问题讨论】:

    标签: php python json curl flask


    【解决方案1】:

    使用 -F 选项以multipart/form-data 发送数据

    curl -X POST -H "Content-Type: multipart/form-data" -F "file=@sample.txt" -F "username=xyz" -F "password=xyz" http://localhost:5000/test
    

    【讨论】:

      【解决方案2】:

      您不能将带有 json 的文件一起发送,因为它们有不同的Content-Type。或者,您可以将您的 json 字符串化并使用multipart/form-data 发送它们。例如,您可以发送form,如下所示:

      curl -X POST -H "Content-Type: multipart/form-data" -F "file=@sample.txt" -F "json_data='{\"username\":\"xyz\",\"password\":\"xyz\"}'" http://localhost:5000/test  
      

      在python中,你可以通过request.form.get("json_data")获取这个json。它比通过普通的multipart/form-data 传递键值对更健壮,因为它支持更复杂的结构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-12
        • 2017-02-25
        • 1970-01-01
        • 2023-03-16
        • 2020-02-19
        • 1970-01-01
        • 2018-12-21
        相关资源
        最近更新 更多