如何正确格式化发布请求的正文?
Posted
技术标签:
【中文标题】如何正确格式化发布请求的正文?【英文标题】:How to properly format body for post request? 【发布时间】:2012-06-24 03:59:35 【问题描述】:我正在使用名为 restclient 的 firefox pluing 来模拟发布请求。它似乎没有获取任何帖子数据,但不确定我的格式是否正确。
使用标头:Content-Type: application/json 和正文:“id”:1234
但不去,它没有在我的php中获取id参数,我需要设置一些特殊的格式吗?
【问题讨论】:
似乎是正确的。问题可能在于您如何使用此插件 好吧,我正在我的 php 代码中执行 print_r($_POST) 并且它是空的。如果有人想知道,我还将方法设置为“POST”。 查看这篇文章:***.com/questions/8893574/php-php-input-vs-post/… 【参考方案1】:好的,可以了,这是需要的
两种内容类型:
Content-Type: application/json
Content-Type: application/x-www-form-urlencoded
然后在正文中设置您的参数:
param1=value1¶m2=value2
感谢大家的帮助。
【讨论】:
这可能有效,但并不真正正确。您的内容不能有多种类型。这只是一种类型,在这种情况下是Content-Type: application/x-www-form-urlencoded
。 JSON 看起来像'key1':'value1','key2':'value2','key3':'value3'
,如果你有,你必须将标题设置为Content-Type: application/json
。显然,现在您的服务器只需选择最后一个标头。但是,如果您省略误导性的示例,此示例也应该有效,因为它不是 JSON。
因此,当使用像param1=value1&param2=value2
这样的url 编码键值对时,正确的Content-Type 是application/x-www-form-urlencoded
,您可以通过服务器端的$_POST
-array 访问它.如果你有 'key1':'value1','key2':'value2','key3':'value3'
这样的 JSON 数据,请将 content-type 设置为 application/json
,然后你可以在服务器端使用 $data_array = json_decode(file_get_contents('php://input'), true);
将数据转换为数组【参考方案2】:
PHP 不会将 JSON 正文自动解析为 $_POST
超全局。这只发生在application/x-www-form-urlencoded
和multipart/form-data
POST 正文中。也就是说,您可以自己解析正文 - 您可以通过 php://input
pseudo-stream 访问原始 POST 正文。
【讨论】:
好的,我已经添加了 Content-Type:application/x-www-form-urlencoded,还是不行,我还缺少什么吗?我只是想模拟一个 POST 请求。 是的。您的实际正文内容是 JSON,仅对服务器发送的内容撒谎是不够的。您要么必须在application/x-www-form-urlencoded
format 中实际编码正文,要么需要在后端显式处理 JSON。以上是关于如何正确格式化发布请求的正文?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Postman 以 JSON 格式在请求正文中发送对象数组?