[英]How to send JSON file as part of request body in CURL POST command
[英]How to properly stringify XML to put in JSON body as part of CURL command
我想通过CURL命令将XML文件添加到JSON请求正文中。 这就是我现在所拥有的
data=$(cat testdata.xml)
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ "data": ''"$(echo $data)"''}' 'http://...'
但是,这发送{ data: '$(echo $data)' } }
而不是实际获取文件。
如果我像这样取出$(echo $ data)周围的外部单引号:
data=$(cat testdata.xml)
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ "data": '"$(echo $data)"'}' 'http://...'
然后我在位置10的JSON中遇到错误Unexpected token <
因为服务器正在读取
'{ "data": <?xml version="1.0" encoding="UTF-8"?> - <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don\'t forget me this weekend!</body> </note>}',
我该如何解决? 请注意,我不想先转换为JSON。 我只想在正文中发送字符串化的xml文件。
与往常一样,使用jq
在bash中生成正确转义的JSON。
data=$(jq -Rs '{ "data": . }' <testdata.xml)
curl -X POST \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
-d "$data" \
"$url"
如果您尚未安装jq
,则可以使用Python进行作业,将以下内容替换为使用jq
的行:
data=$(python -c 'import json, sys; json.dump({"data": sys.stdin.read()}, sys.stdout)' <testdata.xml)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.