我正在编写一个shell脚本来将JSON文件发布到URL。
标题是:
Content-Type: application/json
Accept: application/json
Account-Number: xxxxxxxx
Authorization: Basic eW91cl91c2VyX25hbWU6cGFzc3dvcmQ=
上面的JSON字符串保存在.JSON文件中,我的curl命令应该处理它并获得所需的响应。我使用以下命令但它没有成功处理:
curl -H "Content-Type: application/json" -X POST -d "data=@$f" https://abcdef.com/test/example/v1/
$ f具有JSON文件名。
我也有以下问题:
答案 0 :(得分:5)
您没有发送所有标头。我不相信有一个选项可以从文件中读取所需的标题。
由于您使用bash编写脚本,因此我会将所有选项存储在shell数组中以提高可读性:
curl_opts=(
-H "Content-Type: application/json"
-H "Accept: application/json"
-H "Account-Number: xxxxxxxx"
-H "Authorization: Basic eW91cl91c2VyX25hbWU6cGFzc3dvcmQ="
-X POST
--data-binary "@$f"
)
curl "${curl_opts[@]}" https://abcdef.com/test/example/v1/
答案 1 :(得分:1)
假设您想要完全按原样发布JSON数据(无需进一步处理),您应该使用--data-binary
。如果不需要保留新行等内容,则可以使用-d
/--data
,但使用-d @file
形式,如下所示:
filename=file.json
curl http://httpbin.org/post --data-binary "@$filename" --user "name:password" -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Account-Number: xxxxxxxx'
当然,修复了JSON中的所有语法错误(如挂逗号,隔离单引号等)。以key=val
(或key=@file
)形式指定数据,就像您正在尝试一样,不起作用(您可以将其用于-F
的表单参数);见valid data part syntax in curl。
请注意,使用--data-binary
时,默认方法为POST
(因此,无需使用-X
指定),但您必须指定正确的Content-Type
}。
此外,不要手动计算HTTP Basic Auth的Authorization
标头,只需使用-u
/--user <user:pass>
选项。