我需要使用JSON格式将变量发布到网站API . 经过一些研究并使用测试后服务器,我想出了这个字符串:
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”) . 相反,所有东西都被放入了邮政体内 .
完整的帖子请求可以在给定的地址看到:
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下 . 但同样没有列出任何后期参数 .
难道我做错了什么?是否可以使用JSON发布变量(使用 id=value&id2=value2
与 application/x-www-form-urlencoded
的方式)?
PS我发现了一个类似的帖子(how to post with curl to REST/JSON service?),它取决于服务器 . 但在我的情况下,通过使用此测试服务器,我应该看到实际的"raw"请求(引自posttestserver.com
“因此,我将一个简单的服务放在一起,将* HTTP POST的内容转储到一个可以在闲暇时查看的文件中 . ”
) .
1 回答
您会注意到它确实在
Post Body
部分显示了您的数据 . 当您使用application / json通过CURL发送时,它只是将JSON泵入正文 . 如果是x-www-form-urlencoded
,它会将其序列化为PHP本身可以理解的格式,例如:id=value
. 看起来像's working as intended, just the server doesnt'了解JSON .如果您希望该特定服务正确理解您的内容,则需要通过简单地将其序列化为标准的
x-www-form-urlencoded
格式-d "id=value"