【问题标题】:Usage of $HTTP_RAW_POST_DATA$HTTP_RAW_POST_DATA 的使用
【发布时间】:2017-04-20 12:03:41
【问题描述】:

我正在搜索这个的确切定义,但我仍然找不到满意的定义。

我用的是NuSOAP网络服务,有一条线,

$server->service($HTTP_RAW_POST_DATA);

这里 $HTTP_RAW_POST_DATA 的目的是什么?

根据我的研究,它是用于收集原始POST 数据,但我对答案并不满意。原始 POST 数据的确切含义是什么?

【问题讨论】:

  • TFM 说得很清楚,不是吗?

标签: php web-services nusoap


【解决方案1】:

一个 HTTP 请求由两部分组成。一组标题和一个正文。

标头包括请求的 URL 和缓存控制帮助程序(例如“我昨天有一个版本,如果有变化,只给我一个新版本,好吗?”)。

正文可能会出现也可能不会出现,具体取决于请求的类型。 POST 请求有正文。

正文可以是客户喜欢的任何格式。其中一个标头会告诉服务器格式是什么。

HTML 表单使用了几种格式,PHP 知道如何解析这些格式并将数据放入 $_POST。

如果数据是另一种格式,例如 JSON,或者如果数据不符合 PHP 的怪癖(例如在同名键末尾带有 [] 的规则),那么您可能想要直接访问数据,这样你就可以自己解析了。那是原始的 POST 数据。

  • $_POST 包含 URL 编码(应用程序/www-url-encoded)变量,这些变量会发布到您的脚本中,PHP 会为您解码它们。在处理 HTML FORM 数据时使用这个。

  • file_get_contents("php://input") - 获取原始 POST 数据,当您编写 API 并且需要无法通过 PHP 解码为 $_POST 的 XML/JSON/... 输入时需要使用它。

  • $HTTP_RAW_POST_DATA - 理论上和上面一样,但是依赖于php.ini。并且在 PHP 7 中不再可用

【讨论】:

  • 顶部的块引用感觉不合适。仅提及底部的删除可能更有意义:“取决于 php.ini”->“取决于 php.ini,并且在 PHP 7 中不再可用”
  • 我很困惑 1) 为什么$_POST 不能用?
  • 无法通过POST获取JSON等数据,请自行尝试。
  • 我同意你的看法。我知道 json,或者无法使用 $_POST 获取 api 中的数据。我在问为什么?我们从客户端发送到服务器的参数是发布数据,那么为什么我们不能使用 $_POST 获取数据。我想知道内在的过程,而不仅仅是事实。希望你能理解!
【解决方案2】:

HTTP 消息由一系列标头和正文组成(根据标头,可以是必需的/可选的/禁止的)。

对于 URL http://stackoverflow.com/questions/43519007/usage-of-http-raw-post-data,正文是用于生成您正在阅读的文档的 HTML。

如果你向它发出 GET 请求,那么就没有请求正文。

如果您发出 POST 请求,那么就会有。如果您提交表单,它将使用您可以使用 enctype 属性指定的格式之一进行编码。

通常,在 PHP 中,当您想要处理该数据时,您会使用 $_POST,其中包含正文已解码后的内容。

原始主体是解码之前的主体。

【讨论】:

  • 这有点糊涂了,因为你讲的是HTML,也就是response的body,真的和问题没有关系。
【解决方案3】:

大多数时候,当我们处理 HTTP POST 请求时,我们会查看来自浏览器的表单提交的结果。这将以编码一组键值对的标准方式(“查询字符串编码”或“多部分/表单数据”)格式化数据。 PHP 会自动将任何这种格式的请求解析成超全局数组$_POST

但是,实际的 HTTP 请求正文只是一段文本,在某些情况下我们希望将其视为文本。例如,SOAP 请求使用 XML 文档作为 POST 请求的主体。 $HTTP_RAW_POST_DATA 让您可以访问此文本 - 它是“原始的”,因为它没有被处理,它只是作为字符串返回给您。

值得注意的是,$HTTP_RAW_POST_DATA 是一种的访问方式,而在较新版本的 PHP 中正确的方法是使用 file_get_contents('php://input');,其中 php://input 是一个虚拟文件表示相同的原始数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多