如何通过用于curl的JSON文件传递有效负载?

如何通过用于curl的JSON文件传递有效负载?,json,curl,Json,Curl,我可以通过执行以下命令成功创建一个位置: $curl-vX POSThttps://server/api/v1/places.json -d“ 认证令牌=B8dsbz4HExMskqUa6Qhn&\ 地点[名称]=加油站中心和\ 地点[城市]=格罗斯比伦和\ 地点[地址]=Buschweg 1&\ 地点[纬度]=52.3601&\ 地点[经度]=13.3332和\ 地点[洗涤]=真实和\ 地点[成立年份]=2000年和\ 放置[产品][]=柴油机和\ 放置[产品][]=benzin\ " 服务

我可以通过执行以下命令成功创建一个位置:

$curl-vX POSThttps://server/api/v1/places.json -d“
认证令牌=B8dsbz4HExMskqUa6Qhn&\
地点[名称]=加油站中心和\
地点[城市]=格罗斯比伦和\
地点[地址]=Buschweg 1&\
地点[纬度]=52.3601&\
地点[经度]=13.3332和\
地点[洗涤]=真实和\
地点[成立年份]=2000年和\
放置[产品][]=柴油机和\
放置[产品][]=benzin\
"
服务器返回创建的HTTP/1.1201

现在我想将有效负载存储在JSON文件中,如下所示:

//testplace.json
{
“认证令牌”:“B8dsbz4HExMskqUa6Qhn”,
“名称”:“加油站中心”,
“城市”:“格罗斯比伦”,
“地址”:“Buschweg 1”,
“纬度”:52.3601,
“经度”:13.3332,
“清洗”:没错,
“成立于年”:2000年,
“产品”:[“柴油”、“奔驰”]
}
因此,我修改了要执行的命令,如下所示:

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

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

curl
使用默认内容类型
application/x-www-form-urlencoded
发送POST请求。如果要发送JSON请求,必须指定正确的内容类型标头:

$curl-vX POSThttp://server/api/v1/places.json -d@testplace.json\
--标题“内容类型:应用程序/json”
但这只有在服务器接受json输入时才起作用。url末尾的
.json
可能只表示输出是json,但不一定意味着它也将处理json输入。API文档应该给您一个提示,说明它是否正确


您得到
401
而不是其他错误的原因可能是服务器无法从您的请求中提取
auth_令牌。

要澄清如何实际指定包含要发布的JSON的文件,请注意,它带有
@
符号,如操作中所示

e、 g.本地.NET核心API的典型帖子:


curl-X POSThttps://localhost:5001/api -H“Content Type:application/json”-d@/some/directory/some.json

我试图在
-d
之后使用
cat file.json
,但遇到了问题,直到我从这个答案中了解到我可以使用
@file.json
。谢谢:)请注意,如果您需要多个标题,您需要多次指定
-H
/
--header
,至少在Ubuntu上的bash中测试时是这样。另外请记住,如果您正在上载二进制文件,您应该使用
--data binary
。对于任何引用此问题来回答“如何指定包含JSON的文件”的人,请注意,它带有问题中给出的
@
符号,例如
$curl-vX POSThttp://server/api/v1/places.json -d@testplace.json
。这假设您是从包含testplace.json的目录运行curl,否则使用例如
@/some/directory/some.json