如何在curl请求中发送json数据和文件以供Flask处理?

时间:2017-12-01 07:17:27

标签: php python json curl flask

问题:

我想将带有-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请求并使用flask来处理..

我有什么方法可以做到这一点吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您无法一起发送带有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传递键值对更健壮,因为它支持更复杂的结构。