繁体   English   中英

使用Shell脚本将JSON文件发布到URL

[英]Post a JSON file to a URL using Shell Script

我正在编写一个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文件名。

我也有以下问题:

  1. 我的标头和JSON字符串应该在同一个JSON文件中吗? 如果标头存在于其他文件中,则其扩展名应该是什么? 以及如何使用curl命令处理该问题?
  2. 我应该对特殊字符(例如{,“ ,:等)进行任何特殊处理吗?

您没有发送所有标题。 我不相信有一个选项可以从文件中读取所需的标头。

由于您使用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/

假设您想按原样发布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形式参数); 在curl中查看有效的数据部分语法

请注意,在使用--data-binary ,默认方法是POST (因此,无需使用-X进行指定),但是您必须指定正确的Content-Type

另外,不要手动为HTTP Basic Auth计算Authorization标头,而只需使用-u / --user <user:pass>选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM