shell 使用CURL POST更新多个JSON

qgelzfjb  于 2023-02-19  发布在  Shell
关注(0)|答案(1)|浏览(134)

我想在同一个curl POST中更新多个JSON文件,但我无法使其工作。
我一直拿到400块。
我试着在网上查询,但无法找到其他方法。也许有一个更简单的方法来做这件事,但我不确定它是什么。谢谢帮助
我尝试了以下方法

curl -X 'PUT' \
  'http://192.168.1.256:123/api/accessories/123456789' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer $token' \
  -H 'Content-Type: application/json' \
  -d '{
  "characteristicType": "Saturation",
  "value": "30"
}
{
  "characteristicType": "On",
  "value": "1"
}'
curl -X 'PUT' \
  'http://192.168.1.256:123/api/accessories/123456789' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer $token' \
  -H 'Content-Type: application/json' \
  -d '{
  "characteristicType": "Saturation",
  "value": "30"
},
{
  "characteristicType": "On",
  "value": "1"
}'
curl -X 'PUT' \
  'http://192.168.1.256:123/api/accessories/123456789' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer $token' \
  -H 'Content-Type: application/json' \
  -d '[
{
  "characteristicType": "Saturation",
  "value": "30"
}
{
  "characteristicType": "On",
  "value": "1"
}
]'
uqjltbpv

uqjltbpv1#

您可以在localhost中使用具有任意端口的虚拟nc服务器来测试服务器接收到的内容,如下例所示:

$ nc -l 10000

并在curl命令中更改此IP/端口,因此第一个示例变为:

curl -X 'PUT' \
  'localhost:10000' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer $token' \
  -H 'Content-Type: application/json' \
  -d '{
  "characteristicType": "Saturation",
  "value": "30"
}
{
  "characteristicType": "On",
  "value": "1"
}'

这是服务器将收到的内容:

$ nc -l 10000
PUT / HTTP/1.1
Host: localhost:10000
User-Agent: curl/7.68.0
accept: */*
Authorization: Bearer $token
Content-Type: application/json
Content-Length: 106

{
  "characteristicType": "Saturation",
  "value": "30"
}
{
  "characteristicType": "On",
  "value": "1"
}

服务器如何解析它取决于实现。在curl手册页中,建议使用与号(&)添加多个数据负载。这可以通过多次添加-d参数由命令本身完成:

curl -X 'PUT' \
  'localhost:10000' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer $token' \
  -H 'Content-Type: application/json' \
  -d '{
  "characteristicType": "Saturation",
  "value": "30"
  }' \
  -d '{
  "characteristicType": "On",
  "value": "1"
}'

当然,你的服务器不会喜欢在主体中产生的语法,尽管考虑到它是json。
作为一个附加说明,在带引号的字符串中使用bash变量时要小心。如果它们是单引号而不是双引号,它们就不会展开。您可能应该使用-H "Authorization: Bearer $token"

相关问题