如何通过JSON文件传递卷曲的有效载荷?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (44)

我可以通过curl执行以下命令成功创建一个地方:

$ curl -vX POST https://server/api/v1/places.json -d "
  auth_token=B8dsbz4HExMskqUa6Qhn& \
  place[name]=Fuelstation Central& \
  place[city]=Grossbeeren& \
  place[address]=Buschweg 1& \
  place[latitude]=52.3601& \
  place[longitude]=13.3332& \
  place[washing]=true& \
  place[founded_at_year]=2000& \
  place[products][]=diesel& \
  place[products][]=benzin \
"

服务器返回HTTP/1.1 201 Created。 现在我想将有效载荷存储在如下所示的JSON文件中:

// testplace.json
{
  "auth_token" : "B8dsbz4HExMskqUa6Qhn",
  "name" : "Fuelstation Central",
  "city" : "Grossbeeren",
  "address" : "Buschweg 1",
  "latitude" : 52.3601,
  "longitude" : 13.3332,
  "washing" : true,
  "founded_at_year" : 2000,
  "products" : ["diesel","benzin"]
}

所以我修改这个命令来执行,就像这样:

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json

这失败返回HTTP/1.1 401 Unauthorized。为什么?

提问于
用户回答回答于

curl使用默认内容类型发送POST请求application/x-www-form-urlencoded。如果你想发送一个json请求,你必须指定正确的内容类型头文件:

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json \
--header "Content-Type: application/json"

但是,只有当服务器接受json输入时,这才会起作用。将.json在URL的末尾可能仅表明输出是JSON,这并不一定意味着它也将处理JSON 输入。API文档应该给你提示它是否适用。

你得到一个401而不是其他错误的原因可能是因为服务器无法auth_token从你的请求中提取出来。

扫码关注云+社区