如何通过JSON文件传递负载curl?

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

 $ 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用默认的application/x-www-form-urlencoded内容types发送POST请求。 如果你想发送一个json请求,你将不得不指定正确的内容types头:

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

但是,只有当服务器接受jsoninput时,这才会起作用。 url结尾处的.json只能表示输出是json,并不一定意味着它也会处理json input 。 API文档应该给你一个暗示,不pipe它有没有。

你得到401而不是其他错误的原因可能是因为服务器不能从你的请求中提取auth_token