curl post:如何在单个请求中同时发送文件和json数据

时间:2018-08-29 09:19:44

标签: python curl

如何在单个curl POST中发送文件和数据?

尝试了类似一起使用-F和-d选项的方法,但没有帮助:

curl  -X POST -F 'file=/Users/<uid>/model.tar.gz' http://<uri>/api/v1/modelfiles/ -H 'AUTH-TOKEN:<token>' -d '{"model_id": "<uuid>",
           "filename": "model.tar.gz",
           "framework": "Tensorflow",
           "framework_version": "1.8.0",
           "meta": {}
}'

1 个答案:

答案 0 :(得分:0)

简短版本:您不能。这不是HTTP的工作方式。您可以在一个POST请求中发送一个Blob数据,但您尝试发送两个(JSON字符串和文件)。

更长的版本:这取决于您的服务期望。文件中的数据是否应该是JSON的一部分?然后,您需要预处理JSON并将文件数据放入其中,以便发送-d '{"file": "<your file data here>", "filename": ... }'

文件是否应该是名为“ file”的表单字段,并且JSON数据是名为“ json”的字段的内容?然后,您可以同时使用-F file=@/users/uid/model.tar.gz -F 'json={...}'进行发送。 Curl会小心地将它们内联到Blob中,就像您使用带有两个字段的浏览器表单一样。

(请注意文件名前面的@符号;您需要这样做,否则将发送字符串“ /users/uid/model.tar.gz”)

还有其他吗?也许您应该先发送数据,然后再发送JSON?