cURL 发送 JSON 和 PDF 文件

Roy*_*zem 1 python pdf json curl flask

我有这个 cURL 命令来与我的 API 对话:

curl -i -H "Content-Type: application/json" -X POST -d '{"sid":"01234567","text":"TEST","tlf":"123456","ctc":"123456","opr":"XYZ","fbm":"email@email.com","flag":"XYZ","product":"XYZ"}' http://XXX.XXX.XXX.XXX:8080/todo/api/v1.0/tasks
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好,这里是响应:

HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 24
Server: Werkzeug/0.11.3 Python/2.6.6
Date: Wed, 07 Jun 2017 10:03:00 GMT
Run Code Online (Sandbox Code Playgroud)

现在我想在同一个命令中发送一个 pdf 文件。

我想我补充说:

"file":"/var/www/html/olotool/API/attachments/pdf-test.pdf"
Run Code Online (Sandbox Code Playgroud)

最后但它被保存为字符串而不是文档。

如何在一个命令中添加它?

更新:

"file":"$(base64 ~/attachments/pdf-test.pdf)"
Run Code Online (Sandbox Code Playgroud)

将结果更改为<type 'file'>它仍然是一个字符串,但至少它的内容不是(base64 ~/attachments/pdf-test.pdf).

Roy*_*zem 5

这是答案:

curl -i -F data='{"sid":"0123456","text":"TEST","tlf":"13245679","ctc":"123456","opr":"XXX","fbm":"mail@mail.com","flag":"XYZ","product":"XYZ"}' -F 'file=@/var/www/html/olotool/API/testpdf/test.pdf' http://XXX.XXX.XXX.XXX:8080/todo/api/v1.0/tasks
Run Code Online (Sandbox Code Playgroud)

在 API 上而不是使用request.json您使用request.formthen 转换data为 json with json.loads(data).

对于该文件,request.file['files']如果要将它们导入 MySQL,则需要使用并且不要忘记将 pdf 或 word 文档等文件编码为 base64file.read().encode("base64")