【发布时间】:2012-07-02 03:01:45
【问题描述】:
很难决定,
目前我正在发送数据作为 x-www-form-urlencoded 与 php lib curl 与
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($this->arguments));
或
curl_setopt($curl, CURLOPT_POSTFIELDS, $this->arguments);
第一个问题:第二个似乎内容长度更大,第一个解决方案可能更好?
这对于扁平消息很实用,例如:
{
"name": "John",
"token": "2121232145",
"code": "7",
"data": "Hello"
}
但我也可以有一个表示对象的数据字段,在这种情况下我是在对它进行编码,但是这样做(url 编码一个 Json)是非常冗长和丑陋的消息,
另一方面,我尝试将其作为 application/json 内容类型发送
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($this->arguments));
小消息的内容长度较大,但嵌入 json 显然更好
但 x-www-form-urlencoded 也接近我需要发送的表单数据,除非嵌入了 json
根据内容类型有两种不同的 servlet 解析方法并不优雅,那么还有其他选择吗?
【问题讨论】:
-
简短:x-www-form-urlencoded。 LONG:这真的取决于您发送什么样的数据(复杂的嵌套对象或像示例中的几个字段)。此外,这取决于您要如何处理发送的数据,是立即解析和处理还是将其存储然后按原样(以 json 编码格式)发送给用户?
-
@pinepain 数据被发送到 glassfish 服务器,被解析并插入到 Cassandra 数据库中,它可以像这样
{'data': json_encode({'text':'2klines..', 'author':'me'}), 'id':'14141','keywords':json_encode({[{'tag':['blue','red']},{'author':['me']}}), ..}相当嵌套 -
用同样的方式做事会简单很多。为什么不到处使用 JSON?因为 PHP 将表单数据视为 $_POST/$_GET/$_REQUEST 变量和带有无聊 file_get_contents('php://input') 的 JSON 数据。我不喜欢世界围绕 PHP 旋转。在 Node.js 中,使用 JSON 代替表单数据非常简单自然。
标签: php json forms curl content-type