如何在 JSON 中使用 curl post 变量

How to post variables with curl in JSON

我需要使用 JSON 格式将 post 变量添加到网站 API。经过一些研究并使用测试 post 服务器,我想出了这个字符串:

curl -H "Content-Type: application/json" -X POST -d '{"id":"value"}' http://posttestserver.com/post.php

Successfully dumped 0 post variables.
View it at http://www.posttestserver.com/data/2015/09/12/09.46.20574590076
Post body was 12 chars long.

但是没有从字符串中解析出任何变量(在这种情况下它应该找到变量 "id")。相反,所有内容都放入 post 主体。

完整的 post 请求可以在给定的地址看到:

Time: Sat, 12 Sep 15 09:46:20 -0700
Source ip: 178.112.221.72

Headers (Some may be inserted by server)
HTTP_CONNECTION = close
REQUEST_URI = /post.php
QUERY_STRING = 
REQUEST_METHOD = POST
GATEWAY_INTERFACE = CGI/1.1
REMOTE_PORT = 53709
REMOTE_ADDR = 178.112.221.72
CONTENT_LENGTH = 12
CONTENT_TYPE = application/json
HTTP_ACCEPT = */*
HTTP_USER_AGENT = curl/7.43.0
HTTP_HOST = posttestserver.com
UNIQUE_ID = VfRW3NBx6hIAAHNyJToAAAAK
REQUEST_TIME_FLOAT = 1442076380.6991
REQUEST_TIME = 1442076380

No Post Params.

== Begin post body ==
'{id:value}'
== End post body ==

Upload contains PUT data:
'{id:value}'

此处数据同时出现在 "post body" 和 PUT 下。但同样没有列出 post 个参数。

我做错了什么吗?是否可以使用 JSON post 变量(就像使用 id=value&id2=value2application/x-www-form-urlencoded 的方式一样)?

PS我找到了一个类似的post(how to post with curl to REST/JSON service?),这取决于服务器。但在我的例子中,通过使用这个测试服务器,我应该看到实际的 "raw" 请求(引用自 posttestserver.com

"Thus, I've put together a simple service which will dump the contents of an* HTTP POST to a file which can be viewed at leisure."

).

您会注意到它确实在 Post Body 部分显示了您的数据。当您使用 application/json 通过 CURL 发送时,它只是将 JSON 泵入正文。如果它是 x-www-form-urlencoded,它会将其序列化为 PHP 可以本机理解的格式,例如:id=value。看起来它正在按预期工作,只是服务器不理解 JSON.

如果您希望该特定服务正确理解您的内容,您需要通过简单地 -d "id=value"

将其序列化为标准 x-www-form-urlencoded 格式的内容